1

我有一个处理大量内存数据的应用程序。现在,有时会发生 2GB/app 的内存限制,我的程序挂起。任务管理器中的内存使用变得混乱(从 2GB 到 6GB 不断波动) 我想要的是当内存使用达到特定限制时,程序应该优雅地退出。我不想手动干预用户杀死应用程序。这可能吗?

4

2 回答 2

6

您应该分配一个后台监视线程,该线程轮询 System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64,然后根据返回的大小进行操作。

例如。

public class MonitoringThread : Thread{
...

bool working = true;
void run(){
   while(working){
      long size = Process.GetCurrentProcess().PrivateMemorySize64;
      if (size > 2000000000){
         //do anything
      }
      else {
         try{
            Thread.Sleep(1000);
         }
         catch{}
      }
   }
}

}

请注意,我只是在这个页面上写了这段代码,所以可能不太准确:)

于 2013-07-05T07:27:05.217 回答
2

Garbage Collection Notifications当完整的垃圾收集完成时,您可以收到警报。

作为响应,您可以检查GC.GetTotalMemory()当前使用了多少内存,如果它太高,则采取适当的措施。

于 2013-07-05T07:44:20.780 回答