Учимся освобождать занимаемую программой память на 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



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

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

John {J} 13 Sep 2010 в 00:00 #
> Ответ на комментарий от "Алексей" (2010-08-23)
хм... А в чём собственно проблема? Я проверил код рабочий.
Или просто не судьба написать строчку:
label1.Caption := GetUserFromWindows;
в обработчике события Button1.OnClick ?
Владислав 10 Sep 2010 в 00:00 #
Вот простая функция выкидывает всю ненужную память
setprocessworkingsetsize (getcurrentprocess, $ffffffff, $ffffffff);
Алексей 23 Aug 2010 в 00:00 #
Здраствуйте вопрос не по теме но немагу нигде найти ответ на него подскажите пожалуйста что мне делать с эти кодом function GetUserFromWindows: string;
var
UserName : string;
UserNameLen : Dword;
begin
UserNameLen := 255;
SetLength(userName, UserNameLen);
if GetUserName(PChar(UserName), UserNameLen) then
Result := Copy(UserName,1,UserNameLen - 1)
else
Result := ′Unknown′;
end;


как мне сделать так чтобы при нажатии на button выводилось имя пользователя в edit или label.
игорь 18 Aug 2010 в 00:00 #
ооо хоть чтото по вирусам!
mediumpro 13 Aug 2010 в 00:00 #
Не помогло. Есть объект с массивом в 2 млн Extended
Объект создается и грохается в цикле... Цикл не может выполниться более 100 раз... почмуто Out of memory

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