我有一个处理大量内存数据的应用程序。现在,有时会发生内存限制为2GB / app并且我的程序挂起。任务管理器中的内存使用量变得混乱(连续波动从2GB到6GB) 我想要的是当内存使用量达到特定限制时,程序应该优雅地退出。我不想手动干预用户查杀应用程序。这可能吗?
答案 0 :(得分: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{}
}
}
}
}
请注意,我刚刚在此页面中编写了此代码,因此可能不太准确:)
答案 1 :(得分:2)
完整的垃圾收集完成后,您可以使用Garbage Collection Notifications
收到警报。
作为对此的回应,您可以检查GC.GetTotalMemory()
以查看当前使用了多少内存,如果内存太高则采取适当的操作。