Delphi - Минимизировать и восстановить освобождает память? - PullRequest
9 голосов
/ 26 июля 2010

В течение многих лет я увлекался Delphi, и мне всегда было интересно, почему минимизация и восстановление приложения заставляют его использовать меньше памяти?

В качестве примера я использую Delphi 7 и создаю новый проект, на котором ничего нет, кроме пустой формы, с которой начинаются все проекты, а затем нажимаю клавишу F9, чтобы запустить приложение, а затем просматриваю использование памяти для приложения и он занимает около 3,5 МБ, я затем минимизирую приложение, и использование памяти снижается до 760 КБ, а затем я, наконец, восстанавливаю приложение, и использование памяти возвращается к 1,5 МБ, что примерно на 1/2 того, что было, когда оно загружен в первый раз, и это всегда сбивает меня с толку относительно того, что делает это возможным, и еще важнее то, что в любом случае можно запустить приложение с какой-то директивой, которая заставляет его использовать 1,5 МБ памяти вместо 3,5 МБ, которые обычно используются.

Ура, Dave

Ответы [ 3 ]

5 голосов
/ 26 июля 2010

, вероятно, что-то с управлением памятью Windows.попробуйте то же самое с калькулятором Windows, и поведение будет таким же:))

здесь ответ: http://support.microsoft.com/?kbid=293215 и у некоторых людей тот же вопрос: http://digital.ni.com/public.nsf/allkb/9EA3D4258E037B8A8625763300434D4D

С наилучшими пожеланиями,

4 голосов
/ 26 июля 2010

Здесь вы можете найти очень четкое объяснение от Иана Мартинса. Когда приложение сворачивает системный вызов SetProcessWorkingSetSize процедура для освобождения неактивной памяти процесса.

Вы можете сделать то же самое, добавив этот код в свое приложение. В кнопке OnClick вы можете сделать это:

procedure LiberarMemoria;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;

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

Привет

1 голос
/ 26 июля 2010

См. Ответ Барри Келли на этот вопрос .

...