【问题标题】:What are the side effects of using EmptyWorkingSet?使用 EmptyWorkingSet 的副作用是什么?
【发布时间】:2010-12-21 04:28:20
【问题描述】:

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

[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 manager 和 Firefox Optimizer 等等,所以我在想这是否没有不好的副作用或者有没有?

【问题讨论】:

    标签: c# memory-management side-effects


    【解决方案1】:

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

    在如此低的级别上搞乱系统是充满危险的:特别是,资源管理器页面错误可能会减慢系统速度,以至于奇怪的死锁开始出现在他们丑陋的头脑中。最好将其留给 Windows,尤其是对于您未编写的其他程序。

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

    【讨论】:

    • 也许你是对的。我会尝试找到一种方法来优化我自己的程序,而不是优化其他程序,并在危险时删除 EmptyWorkingSet。
    【解决方案2】:

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

    无论如何,有些文章可能对你有帮助:
    Performance Issues with EmptyWorkingSet
    Memory management - forcing a process to free it's memory

    【讨论】:

    • SetProcessWorkingSetSize 怎么样?我以前从未使用过它。两者有什么区别?
    猜你喜欢
    • 2010-11-07
    • 2017-04-15
    • 2011-07-21
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多