Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кто хавает память? [D5, NT4, WinXP]


TTCustomDelphiMaster ©   (2002-07-09 11:48:00) 

Уважаемые коллеги! Както раз я задавал этот вопрос на одном из форумов, но ничего путного мне не ответили. Мобыть вы поможете.

Както делал я программулину, которая ждет часа Ч используя таймер, в час Ч она читает инфу из файла (там написано какую прогу запускать и тд), обрабатывает ее и запускает прогу. Получает ответ о выполнении проги, настраивается на новый час Ч и засыпает.
Так вот захотел я вынести все мозговые функции программулины в dll, чтобы в основное время, когда она спит меньше памяти кушала.
Но получилось так, что при динамическом подключении dll размер памяти занимаемой программулиной увеличивался на 4 кб.
Тогда я провел эксперимент: по таймеру подключал и тут же отключал dll не вызывая никаких функций. Размер памяти занимаемой программой начал быстро увеличиваться по 4 кб и когда я пришел с обкурки (через 5 минут) достиг 30 МБ !!!
Ладно, забил я на dll сделал в exe"шнике. Но и тут интересная штука получилась. После запуска он занимает 1,7 Мб. Через час тоже. Через два тоже. Но на следующее утро занимает уже 430 кБ.

Так вот у меня сложилось впечатление, что память занимаемая локальными переменными и при удалении меродом FREE освобождается не сразу а через некоторое время.

Может ктото сталкивался с такими случаями или знает как это объяснить?


TTCustomDelphiMaster   (2002-07-09 15:22:00) [1]

Оказывается я неудачно выбрал dll для эксперимента

procedure TForm1.Timer1Timer(Sender: TObject);
var
Handle: THandle;
begin
// Использую свою и размер памяти постоянный
Handle := LoadLibrary("mymath.DLL");

// А так размер памяти занимаемой программой увеличивается
// Handle := LoadLibrary("C:\WINDOWS\SYSTEM\KERNEL32.DLL");
FreeLibrary(Handle);
end;


> Игорь Шевченко © (09.07.02 15:17)

Травой уже давно не питаюсь, только bond lights


Игорь Шевченко   (2002-07-09 15:17:00) [2]

id_privin (09.07.02 14:32)

Где такую траву берешь ?


id_privin   (2002-07-09 14:32:00) [3]

Слышал (сам не тестировал, но верю) что Windows после закрытия приложения и прочих операций сброса памяти, эту память не освобождает а держит еще некое время, на случай если она опять потребуется


IlyaA   (2002-07-09 14:25:00) [4]

Могу тебе сказать что размер проги уменьшился т.к. её часть (не используемая) упала в Swap, а в памяти осталось только то, что непосредственно используется


Skier   (2002-07-09 12:18:00) [5]

>TTCustomDelphiMaster
А может у тебя (при использовании DLL) Application.Handle
неправильно настраивается ???


TTCustomDelphiMaster   (2002-07-09 12:10:00) [6]

В рабочем варианте да.
А в экперементальном (где 30 МБ отъела) ничего кроме формы, таймера и dll не было.


Eugene Lachinov   (2002-07-09 11:55:00) [7]

Ini-файлы используются ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо