Каковы побочные эффекты использования EmptyWorkingSet? - PullRequest
7 голосов
/ 28 ноября 2009

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

[DllImport("psapi.dll")]
public static extern bool EmptyWorkingSet(IntPtr hProcess);

public FreeMem(string programName){

      EmptyWorkingSet(Process.GetCurrentProcess().Handle);
      foreach(Process process in Process.GetProcesses(programName))
      {
            try
            {
                EmptyWorkingSet(process.Handle);
            }
            catch (Exception)
            {
                ...
            }
      } 
}

Кажется, все работает нормально, мне удалось снизить использование памяти некоторыми программами, такими как explorer, с 100 000 КБ до 2000 КБ. Это довольно хорошо, но есть ли побочный эффект от этого? Некоторые коммерческие программы также используют это, как Yamicsoft Vista / Xp manager и Firefox Optimizer, чтобы назвать некоторые из них, так что я думаю, если это не имеет плохих побочных эффектов или есть?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2009

Я подозреваю, что побочным эффектом будет производительность этих других программ - система вернет страницы, замененные вызовом на EmptyWorkingSet(), когда они понадобятся процессу.

Неразбериха с системой на таком низком уровне чревата опасностью: в частности, сбои страниц в проводнике могут замедлить работу системы до такой степени, что странные тупики начнут поднимать уродливые головы. Лучше оставить это для Windows, особенно для других программ, которые вы не написали.

Возможно, вам будет эффективнее понять, почему вашей собственной программе требуется так много памяти. Возможно, где-то есть утечка?

1 голос
/ 28 ноября 2009

Лично я этим не занимался. Кажется «опасным»: P

В любом случае, некоторые статьи могут оказаться полезными:
Проблемы производительности с EmptyWorkingSet
Управление памятью - принуждение процесса к освобождению памяти

...