Dot-Net

我應該在我的 WPF 應用程序中手動強制垃圾收集嗎?

  • April 23, 2011

我剛剛在我的 WPF 應用程序中整理了一些記憶體洩漏。為此,我使用了 CLR 分析器,以及在 Windows 任務管理器中查看程序統計資訊。我的基本測試是確保當某個視窗關閉時,它不會仍然在記憶體中徘徊。

我對 Windows 開發有點陌生,起初我很困惑,因為在一個簡單的測試應用程序中,似乎無論如何,我的視窗在關閉後總是留在記憶體中。但我最終發現這並不意味著存在記憶體洩漏,而只是它們還沒有被垃圾收集。所以我不得不在我的主視窗中創建一個按鈕,該按鈕連接到一個事件處理程序,其中包含手動強制垃圾收集的程式碼。通過手動垃圾收集,我可以完成我的記憶體洩漏測試,並且我得到了所有的排序。

但這讓我開始思考——是否需要手動強制垃圾收集?

當我打開和關閉視窗時,看著我的應用程序的記憶體消耗不斷增加,我感到很痛苦。當然,最終,垃圾收集會自動執行,一切都會得到解決。但是在這些沉重的視窗關閉後手動收集垃圾似乎是個好主意。但是有什麼意義嗎?我覺得除了測試之外,我們不應該強制垃圾收集 - 讓系統對其進行排序。

想法讚賞。

謝謝你們的回饋。我會聽從您的建議,讓系統負責系統設計的工作!

實際上,從那以後,我在一本關於 .NET 框架的書中找到了一個很好的答案。它說:

.NET 垃圾收集器的全部目的是代表我們管理記憶體。但是,在一些非常罕見的情況下,以程式方式強制使用GC.Collect(). 具體來說:

  • 當您的應用程序即將進入您不希望被可能的垃圾收集中斷的程式碼塊時。
  • 當您的應用程序剛剛完成分配大量對象並且您希望盡快刪除盡可能多的獲取記憶體時。

引用自:https://stackoverflow.com/questions/5757207