Как освободить память на Delphi
Недавно писал один парсер и он работал в фоновом режиме и собирал картинки с сайтов, работал он в фоне и должен был потреблять как можно меньше памяти. Но прога получилась на редкость вредная и наоборот прямо-таки зажралась моей памятью! Потому чтобы ее усмирить пришлось воспользоваться вот такой нехитрой процедуркой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | uses Windows, SysUtils; procedure clearmem; var MainHandle: THandle; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID); SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1)); CloseHandle(MainHandle); end; end; |
Просто вызывайте ее периодически в вашей фоновой программе и программа освободит ненужную ей память
Понравилась статья? Жми: | Поделиться в соц. сетях |
Если прога жрет память надо искать косяки в коде, а не городить костыли…..
ИМХО.
Согласен, но по моим наблюдениям сегодня в двух из трех программ наблюдаются хоть маленькие но утечки памяти. Я не могу точно сказать с чем это связанно. но даже самые банальные оконные программы состоящие из кнопки и компонента memo могут потихоньку жрать память. Возможно это из-за неверно используемых деректив IDE но точно не скажу…
Если дело дошло до «зажралась» это уже не маленькие. В любом случае есть средства для отлова утечек.
Тем более, на сколько я помню, она физически ни чего не освобождает, а скидывает все в своп. Т.е. плюсом еще и дополнительные тормоза на копирование запись на диск. Т.е. это (в свете борьбы с утечкой) скорее метод самоуспокоения — очень плохой шаг для создания качественного и надежного софта.
Забыл сказать, опять же если не изменяет память, используемая здесь функция WinAPI предполагает наличие у пользователя определенных прав. У пользователей Windows конечно модно работать всегда с правами Админа. Но это не правильно. И в конторе с грамотным администратором ваша прога может не заработать. Это надо понимать.