2012-08-15 74 views
-1

使用非常大的內存文件時,可能會發生OutOfMemoryException。當生產中發生這種情況時,所有的.NET應用程序都會崩潰,這一定是因爲它們都共享相同的CLR空間。因爲我無法理解如何「回收」CLR,所以我最終重新啓動服務器。內存異常後循環CLR?

在調試過程中,當VS2010發生這種情況時,運行的所有其他.NET事件也會失敗,但VS2010本身不會。但是,因爲我無法理解如何「回收」CLR,我最終在我的工作站上重新啓動。

如何「回收」CLR內存空間?如何在運行爲.NET Framework編寫的Win32服務(非IIS)的服務器上進行回收?

謝謝。

+0

不清楚爲什麼這被改變了。在進行大數據操作時,OOME是一個真正的問題,當它發生時,所有使用CLR的東西(例如服務器上的所有.NET Win32服務)都會死亡。瞭解如何在生產和開發中處理它是一個真正的問題。 – Snowy 2012-08-27 15:37:09

回答

0

騎自行車的CLR需要退出並重新運行該過程。您可以調用GC.Collect來強制GC優化當前使用的內存;但就其而言,有些事情需要記憶,不能「循環」。

+0

什麼是「過程」?所有.NET應用程序共享相同的CLR。在services.msc中,我沒有看到任何標記爲「CLR過程」的東西。我也檢查了組件服務,而不像IIS,我沒有看到明確的「CLR環境」,我可以停止/開始。 – Snowy 2012-08-27 15:39:58

+0

@Snowy分享同一個CLR?這是無稽之談,因爲每個進程擁有自己的內存,並且必須獨立加載CLR,以及廢話,因爲您可以安裝更多的CLR版本,任何給定的.NET應用程序都可以使用特定版本。 – exacerbatedexpert 2012-09-29 15:52:46