我有一個處理大量內存數據的應用程序。現在,有時發生的是2GB /應用程序的內存限制已達到,我的程序掛起。任務管理器中的內存使用情況不一致(連續波動從2GB到6GB) 我想要的是當內存使用達到特定限制時,程序應該優雅地退出。我不想手動干預用戶查殺應用程序。這可能嗎?C#.Net關閉超出內存使用量的應用程序
回答
您應該分配一個後臺監視線程,該線程輪詢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{}
}
}
}
}
請注意,我只是在這個頁面寫了這個代碼,因此它可能不是太準確:)
爭吵API在調用當前提交內存大小之前,您應該先調用Process.Refresh(); http://msdn.microsoft.com/zh-cn/library/system.diagnostics .process.refresh.aspx。 – dash
不,我沒有正確存儲Process的引用,因爲這個原因:每次調用「Process.GetCurrentProcess()」時都會在不緩存的情況下創建新的進程快照。 – LittleSweetSeas
你說得對,我假設Process.GetCurrentProcess()緩存對當前進程的引用,但它每次都會創建一個新對象。 – dash
你可以使用Garbage Collection Notifications
被提醒,當一個完整的垃圾收集已完成。
作爲迴應,您可以檢查GC.GetTotalMemory()
以查看當前使用了多少內存,如果它太高,請採取相應的措施。
- 1. 應用程序意外關閉c#.net
- 2. 關閉程序的向量內存關閉C++
- 3. C++應用程序超出內存,但不使用虛擬內存
- 4. 將應用程序中的變量存儲在c中關閉#
- 5. .NET應用程序不關閉
- 6. 強制應用程序關閉(.net)
- 7. 如何減少Socket應用程序的C#內存使用量
- 8. 如何通過按Esc關閉應用程序。在C#.NET
- 9. 從應用程序內關閉iPhone應用程序
- 10. 關閉C#表單但不關閉調用應用程序?
- 11. 關閉的應用程序
- 12. NSWindow關閉時退出應用程序
- 13. 退出時應用程序關閉Android
- 14. 應用程序關閉推出
- 15. 彈出關閉應用程序kivy
- 16. 在Windows關閉應用程序退出
- 17. 關閉C#窗體應用程序
- 18. C#應用程序意外關閉!
- 19. 無法關閉C#應用程序
- 20. C#應用程序關閉問題
- 21. C#應用程序不會關閉
- 22. C#應用程序不關閉
- 23. C#Windows窗體應用程序關閉
- 24. 應用程序突然關閉時的堆內存清除
- 25. 內存不見了(.NET應用程序)
- 26. .Net應用程序內存管理
- 27. 使用PowerShell關閉Excel應用程序
- 28. 使用WiX關閉應用程序
- 29. 使用NSTimer關閉應用程序
- 30. 使用VBA關閉Excel應用程序
重新編寫應用程序以不使用所有可用內存和/或跟蹤內存泄漏(如果它沒有按設計使用所有內存)不是更好嗎? –
你有沒有想過用戶會如何感覺到它在彈出消息「對不起的內存閾值點擊..戈塔去」的消息中,他會砸他的頭:( – V4Vendetta
你說的是多大的數據?處理terrabytes的數據也可以用適當的編碼和設計進行管理,我認爲你應該嘗試改進你的應用程序,我會很樂意更多地瞭解你的應用程序的確如此...... – Sandy