我正在使用下面的代码来释放一些正在运行的程序的内存,因为我自己的程序需要大量内存资源才能运行得更快。
[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 Optimizer 等等,所以我在想这是否没有不良副作用?
最佳答案
我怀疑副作用会影响那些其他程序的性能 - 系统会在进程需要它们时将通过调用 EmptyWorkingSet()
换出的页面带回来。
在如此低的级别上干扰系统充满了危险:特别是,Explorer 页面错误可能会减慢系统速度,导致奇怪的死锁开始抬头。最好将此留给 Windows,特别是对于您未编写的其他程序。
您可能会发现更有效地理解为什么您自己的程序需要这么多内存。也许某处有泄漏?
关于c# - 使用 EmptyWorkingSet 有什么副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1812018/