суббота, 17 июля 2010 г.

Советы бывалым. Как переместить память приложения из ОЗУ в своп?

Не у каждого знаете-ли конфигурация железа больше гигабайта-двух, некоторые вычислительные приложения требуют гораздо больше оперативной памяти, чем готова обеспечить система. Так вот можно сделать "финт ушами" и переместить (спроецировать) память приложения-процесса в файл подкачки. Как? Последовательность действий проста: получить PID процесса-пациента (например своего), получить хэндл на данный процесс (открыть процесс), принудительно ограничить минимальный размер рабочего комплекта памяти процесса (менеджеру виртуальной памяти ничего не останется, как при достижении ограничения скинуть всю память в своп) и собственно освободить хэндл процесса.

На WinAPI все сведется к трем строчкам кода:
pHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(pHandle, DWORD(-1), DWORD(-1));
CloseHandle(pHandle);
 Вот и все )

Комментариев нет:

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

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.