我使用下面的代码来释放某些正在运行的程序的内存,因为我自己的程序需要大量内存资源才能运行得更快。
[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()
当流程需要它们时返回。
在如此低的级别上干扰系统充满了危险:特别是,资源管理器页面错误可能会减慢系统速度,导致奇怪的死锁开始出现。最好将其留给 Windows,特别是对于您没有编写的其他程序。
您可能会发现理解为什么您自己的程序需要这么多内存会更有效。也许有什么地方漏水了?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)