Учимся освобождать занимаемую программой память на Delphi

Опубиковано: 08.05.2008 г., автор: , просмотров: 50775

Пример, который я сейчас хочу вам показать, применим только для программ работающих в фоновом режиме (для других в этом просто нет смысла). Т.е программ, которые постоянно сидят в памяти и не мозоля глаза пользователю занимаются своими делами. Данный delphi исходник подойдет при создания троянов, вирусов, планировщика задач и.т.д. Для таких приложений крайне важным является объем потребляемой памяти, и разработчик должен свести его к минимуму.
Переходим к коду:

Создаем простенькую процедуру после вызова которой наша Delphi программа освободит всю ненужную ей память.

uses Windows, SysUtils;

procedure TrimWorkingSet;
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;

Пользуйтесь на здоровье !

Code courtesy of Roy Nelson ( rnelson@inprise.com), Inprise European Professional Support
From Delphi Magazine article "Slimming the fat off your Apps" by Hallvard Vassbotn, hallvard@falcon.no



Похожие материалы

Последние из рубрики

yasny 11 Jul 2010 в 00:00 #
Отлично помогло вот в чём:
в проге присутствуют 2 массива, размерностями до 8 млн., причём элементами массивов являются объекты сложных классов. Периодически массивы должны обнулятся и создаваться заново. Методы типа free и тд. не очищают память реально, и в процессе работы винда говорила out of memory и тд... в таск манагере тоже видно как растёт файл подкачки.
Периодическое исполнение обсуждаемой процедурки РЕШИЛО ПРОБЛЕМУ. УРА!!
DeMoN 17 Jun 2010 в 00:00 #
насколько я знаю, по факту память не освобождается
Dimon 06 May 2010 в 00:00 #
А как очистить файл подкачки, кто нибудь знает, ваще бы идеально получилось.
ramp 05 Apr 2010 в 00:00 #
Красава!
Alex 18 Feb 2010 в 00:00 #
освобожденная память переходит в файл подкачки. Фактически освобождается только оперативная память, а память занятая приложением остается той же

Добавить комментарий