Jun 10

Как уменьшить память?

Небольшая хитрость для фоновых приложений. К примеру, это быть может планировщик задач... Т.е. имеются ввиду приложения, все время сидящие в памяти, и делающие что-то  в фоне, при этом не отвлекая юЗверя от собственных дел...Для такого типа приложений, достаточно важным моментом представляется размер потребляемой ими памяти. Ведь фоновые приложения по минимуму должны занимать обьем оперативной памяти и не давать лишнюю нагрузку на сам процессор. Если подойти, что назвается "с умом",  этот способ можно использовать практически во всех приложениях - это также просто и полезно, как пить гранатовый сок. Но для активных интерфейсных приложений делать это не резонно и бесмысленно.

Сам код (работать будет на на WinNT системах):

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;

... или другой вариант (аналог тому, который использует Windows при сворачивании окон):

if Win32Platform = VER_PLATFORM_WIN32_N

T then

SetProcessWorkingSet

Size(GetCurrentProce

ss, $FFFFFFFF, $FFFFFFFF);

Частичный копирайт Code courtesy of Roy Nelson



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

    Смысла так делать никакого.

    Предположим вы выгрузили себя в своп. Чего вы этим добились? Вы думаете вы освободили память? А для кого? Может никого нет, чтобы её занять. Но тормоза сбросом себя на диск вы уже добавили. Иными словами, вы заплатили за то, что может не понадобится. Конечно, если кто-то запустится потом – системе уже не нужно выгружать вас в своп. Но если нет – вы напрасно трогали диск.

    Второй сценарий. Вы не стали делать это. Но тут в системе запустился фотошоп и запросил кучу памяти. И знаете что? Система сама выгрузит ваше приложение в своп, потому что фотошоп активен, а вы – фоновое приложение, которое ничего не делает. Здесь получается, что вы ничего не делали, но всё равно все довольны.

    Не надо вмешиваться в работу планировщика памяти – он и сам прекрасно разбирается, когда надо увеличивать или уменьшать вашу песочницу. Вызывая эту функцию, вы делаете только хуже. Не могу поверить, сколько реально людей ведутся на показатели памяти в диспетчере задач, не глядя на реальную производительность.

    1
  2. ХОТ
     Add karma Subtract karma  +0
    Цитировать.

    Как раз наоборот, если не вмешатся в планировщик памяти то будет только хуже

    2

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

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