2009-11-28 149 views
7

我正在使用下面的代码来释放一些正在运行的程序的内存,因为我自己的程序需要较大的内存资源才能运行得更快。使用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) 
      { 
       ... 
      } 
     } 
} 

这似乎是做工精细,我能打倒像Explorer中的某些程序的内存使用量从100,000 KB到2000 KB。这很不错,但是这样做会有副作用吗? 一些商业软件也使用Yamicsoft Vista/Xp管理器和Firefox Optimizer这样的命名,所以我想如果这没有不好的副作用或在那里?

回答

2

我怀疑的副作用将是那些其他程序的性能 - 系统会带来的页面换出通过调用EmptyWorkingSet()回当过程需要他们。

在这样低的级别下系统充满了危险:特别是,Explorer页面错误可能会使系统变慢,直到奇怪的死锁开始追溯他们丑陋的头部。最好把它留给Windows,特别是对于你没有写的其他程序。

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

+0

也许你是对的。我会尝试找到一种方法来优化我自己的程序,而不是优化其他程序,并删除EmptyWorkingSet,如果它危险的话。 – murasaki5 2009-11-28 10:19:43