Apr 08

Уменьшаем размер памяти, занимаемой программой.

Подсмотрел тут у Snowy интересный прием, для освобождения памяти, не нужной, в данный момент, программе. Как известно, 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;

Это все. Никакого волшебства :) . Хотите проверить? Пожалуйста. Проверьте, сколько занимает программа до нажатия на кнопку и сколько после. Приятно удивитесь ;) .

П.С. смотрите самые новые фильмы онлайн на лучшем сайте кинофильмов в Рунете - kinokadrik.ru.  Только на нашем ресурсе ежедневные оновления и качественный просмотр вам гарантируются абсолютно бесплатно!


  1. Kryvich
     Add karma Subtract karma  +1
    Цитировать.

    На самом деле оригинал вот здесь:
    http://hallvards.blogspot.com/2008/02/tdm5-slimming-fat-off-your-apps.html

    Кстати, комментарии тоже интересно почитать.

    1
  2. aktuba
     Add karma Subtract karma  +0
    Цитировать.
    Комментарий автора

    Спасибо, не знал.

    2
  3. Palkin Max
     Add karma Subtract karma  +0
    Цитировать.

    Спасибо :)
    Но, imho, тут удобней реализовано.

    3
  4. aktuba
     Add karma Subtract karma  +1
    Цитировать.
    Комментарий автора

    Спасибо :)
    Но, imho, тут удобней реализовано.

    Это одно и тоже.

    4
  5. Корвин
     Add karma Subtract karma  +0
    Цитировать.

    Пользы от этой штуки мало.
    Если смотреть нормально распределение памяти видно,
    что размер виртуальной памяти то не изменяется.
    То что уменьшается WorkingSet ничего не дает.
    Просто свопится программа. А как только вы полезете к данным,
    которые в свопе они загрузятся в физическую память.
    Т.е. возможно будут тормоза.

    5

Поделитесь вашими мыслями

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>