2009-11-28 51 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) 
      { 
       ... 
      } 
     } 
} 

エクスプローラのようないくつかのプログラムのメモリ使用量を100,000 Kbから2,000 Kbに減らすことができました。それはかなり良いですが、これには副作用がありますか? 商用ソフトウェアの中にはYamicsoft Vista/XPマネージャーやFirefox Optimizerのようなものもありますので、これに悪影響がないのか、それともないのでしょうか?

答えて

2

私は副作用がこれらの他のプログラムの性能になると考えています。プロセスがそれらを必要とするときに、システムは呼び出しによってスワップアウトされたページを再び持ってきます。EmptyWorkingSet()

このような低レベルでシステムを騒がすと、危険が伴います。特に、エクスプローラのページフォルトは、システムが奇妙なデッドロックが醜いヘッドを後ろから追い始めるまで遅くなる可能性があります。これをWindowsに残すこと、特にあなたが書いていない他のプログラムのために残すことがベストです。

自分のプログラムにメモリが大量に必要な理由を理解する方が効率的です。おそらくどこかに漏れはありますか?

+0

は、多分あなたは正しいです。他のプログラムを最適化するのではなく、自分のプログラムを最適化する方法を見つけようとします。EmptyWorkingSetを削除すると危険です。 – murasaki5

関連する問題