procedure TrimWorkingSet;
var
MainHandle : THandle;
begin
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle,-1,-1);
CloseHandle(MainHandle);
end;
Преди време разработвах един проект когато ми обърнаха внимание че проекта изведнъж след тръгване се минимизира и после се връща в отново в нормално положение. Понеже проекта беше наследен и нямаше как да се преработи изоснови взех че махнах тази негова особенност. На следващия ден получих гневен мейл как съм махнал основна функция и да съм я върнел веднага. И аз си зачудих какво е толкова много специфицното на едно минимизиране-връщане.
Оказа се че Windows NT при минимизиране намаля размера на паметта изполвана от програмата. Пример пускам calc.exe в момента - използваната памет е 3684 k, минимизираме и програмата заема 508 k, възтановяване и 1552 k. Тази фукнция на операционната система ми беше неизвестна, но минимизирането и възстановяването ми беше доста досадно.
След няколко дена намерих горния код който върши подобна работа и без досадните миганки на програмата. Отделно кода е достатъчно гъвкав и може да се преработи и за VisualC++, Visual Basic, C++Builder и даже .Net.
На печелившите честито!