使用EmptyWorkingSet有什么副作用?

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

[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) { ... } } } 

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

我怀疑副作用将是那些其他程序的性能 – 当进程需要时,系统会通过调用EmptyWorkingSet()将页面交换出来。

在如此低的水平上与系统混淆充满了危险:特别是,资源管理器页面故障可能会使系统速度降低到奇怪的死锁开始使他们丑陋的头部发挥作用的程度。 最好把它留给Windows,特别是对于你没写的其他程序。

您可能会发现更有效地理解为什么您自己的程序需要如此多的内存。 也许在某处有泄漏吗?

就个人而言,我没有处理这个问题。 似乎有点’危险’:P

无论如何,你可能会发现一些有用的文章:
EmptyWorkingSet的性能问题
内存管理 – 强制进程释放内存