使用EmptyWorkingSet有什么副作用?

mur*_*ki5 7 c# memory-management side-effects

我正在使用下面的代码释放一些正在运行的程序的内存,因为我自己的程序需要大量的内存资源才能更快地运行.

[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)
            {
                ...
            }
      } 
}
Run Code Online (Sandbox Code Playgroud)

它看起来工作正常,我能够将某些程序(如资源管理器)的内存使用量从100,000 Kb降低到2,000 Kb.这很不错,但这样做有副作用吗?一些商业软件也使用它,如Yamicsoft Vista/Xp管理器和Firefox优化器,仅举几例,所以我在想,如果这没有不良副作用或存在?

Jer*_*Gee 2

我怀疑副作用将是那些其他程序的性能 - 系统将在EmptyWorkingSet()进程需要它们时将调用换出的页面带回。

在如此低的级别上干扰系统充满了危险:特别是,资源管理器页面错误可能会减慢系统速度,导致奇怪的死锁开始出现。最好将其留给 Windows,特别是对于您没有编写的其他程序。

您可能会发现理解为什么您自己的程序需要这么多内存会更有效。也许有什么地方漏水了?