Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2013, 00:15   #1
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию Chromium + d7: очистка памяти

И снова TChromium (DCEF3)
При переходах между страницами довольно быстро увеличивает занимаемый объём памяти. Как лучше организовать её принудительную очистку? Ни одного "гуманного" способа в голову не пришло
Как вариант в OnAddressChange или перед Chromium.Load "обрезать" память приложения: SetProcessWorkingSetSize(MainHandle , DWORD(-1), DWORD(-1));
Или создавать экземпляр обьекта каждый раз:
Код:
if FirstStart then
begin
ch:=TChromium.Create(Form1);
ch.Parent:=Form1;
ch.align:=alClient;
ch.Load(edt1.text);
FirstStart:= False;
end
else
begin
Ch.free;
ch:=TChromium.Create(Form1);
ch.Parent:=Form1;
ch.align:=alClient;
ch.Load(edt1.text);
end;
Есть еще вариант
Chromium1.Browser.GetMainFrame._Rel ease;
Но тут AV, что, в общем-то, предсказуемо.
noname_06 вне форума Ответить с цитированием
Старый 15.04.2013, 00:23   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
SetProcessWorkingSetSize(MainHandle , DWORD(-1), DWORD(-1));
вот этого не стоит вообще никогда делать.

Цитата:
При переходах между страницами довольно быстро увеличивает занимаемый объём памяти.
ну правильно, весь кэш в памяти. Сбрасывайте его в фаилы.
Человек_Борща вне форума Ответить с цитированием
Старый 15.04.2013, 00:38   #3
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Я же и говорю, варианты, мягко говоря, "не гуманные". Читал совет
Цитата:
Советую Вам ещё указывать путь к каталогу с кэшем при инициализации CEF, тогда немного по быстрее будет работать, потому что по дефолту он без кэша работает.
То есть в исходнике проекта (DPR) вместо CefLoadLibDefault использовать CefLoadLib('путь к каталогу для кэша'). При отсутствии каталог создатся автоматически.
Но у меня в DPR Cef, как ни странно, вообще не упоминается. Я пробую так (в конце main.pas):
Код:
initialization
CefCache := 'cache';
[OFF]У меня еще куча вопросов по TChromium в запасе , на них лучше создавать отдельные темы, или можно тут продолжать?[/OFF]

Последний раз редактировалось noname_06; 15.04.2013 в 00:43.
noname_06 вне форума Ответить с цитированием
Старый 15.04.2013, 01:20   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Для решения вашей проблемы изучайте исходники компонента и документацию по нему. ИМЪХО там все ответы.
Человек_Борща вне форума Ответить с цитированием
Старый 15.04.2013, 01:35   #5
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Совершенно верно. Вот только к TChromium документация крайне скудная и в большинстве случаев касается С++, так что я чаще угадываю нужное действие, чем осмысленно пишу код.
noname_06 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
очистка памяти Kukurudza Общие вопросы C/C++ 1 30.07.2012 11:34
Очистка памяти в delphi 7 Ербулат Общие вопросы Delphi 11 13.06.2012 11:22
Очистка памяти _-Re@l-_ Общие вопросы Delphi 4 22.05.2010 17:08
Очистка памяти Senator Общие вопросы Delphi 1 28.06.2008 19:39
Очистка памяти в C# darkstarx Общие вопросы .NET 1 14.04.2008 14:48