記憶體回收
更新:2007 年 11 月
.NET Framework 的記憶體回收行程會管理您應用程式記憶體的配置和釋放。每當您使用 new 運算子建立物件時,Runtime 便會從 Managed 堆積 (Heap) 為該物件配置記憶體。只要在 Managed 堆積中有位址空間可用,Runtime 就會繼續為新物件配置記憶體。但是,記憶體畢竟不是無限的。到最後,記憶體回收行程還是必須進行回收以釋放某些記憶體。記憶體回收行程的最佳化引擎會依據所做的配置決定進行回收的最佳時機。當記憶體回收行程進行回收時,它會檢查 Managed 堆積中應用程式已不再使用的物件,並且執行必要作業以回收它們的記憶體。
這一節將描述記憶體回收行程如何自動管理應用程式中 Managed 物件之記憶體的配置和釋放。此外,也會描述可用來適當地清除任何應用程式所建立之 Unmanaged 資源的建議設計模式。
注意事項: |
---|
在 .NET Framework 1.0 版中,Common Language Runtime (CLR) 有個別的記憶體管理員可供大型物件堆積使用。在某些情況下,此記憶體管理員不會將未使用的記憶體傳回給作業系統,而在少數情況下,它不會讓此記憶體可供記憶體回收使用;如此會因為虛擬位址空間分割的緣故,而無法配置記憶體。在 .NET Framework 1.1 和 2.0 版中,大型物件堆積是由稱為堆積區段的連續記憶體區域所組成,這些區域會適當地對齊,讓虛擬記憶體分割減至最少。在記憶體回收期間,從大型物件中回收的空間會合併起來,並放在可用清單上。僅包含可用清單項目的堆積區段會釋放出來,而此記憶體會傳回到作業系統。對大型物件堆積所做的這些變更,已經有效排除因為這種形式的虛擬位址空間分割所造成的記憶體配置失敗。 |
重要事項: |
---|
在擁有超過 2GB 記憶體的伺服器上,可能需要在 boot.ini 檔中指定 /3GB 參數,以避免仍有記憶體可供系統使用時,就發生明顯的記憶體不足問題。 |
在本節中
記憶體管理中的開發者背景
描述原來使用 Visual Basic、C++ 和 COM 的開發人員,在轉而使用 Managed 程式碼時應該做些什麼調整。Finalize 方法和解構函式
描述 Finalize 方法和解構函式 (Destructor) 如何讓物件在記憶體回收行程自動回收物件的記憶體前執行必要的清除作業。弱式參考
描述允許記憶體回收行程回收物件,同時允許應用程式存取物件的功能。引發的集合
描述如何立即或在下次最佳時間回收物件。延遲模式
描述判斷記憶體回收干擾程度的模式。共用 Web 裝載的最佳化
描述如何將裝載多個小型網站的伺服器上的記憶體回收達到最佳化。記憶體回收告知
描述如何判斷何時即將進行完整記憶體回收以及何時完成。清除 Unmanaged 資源
描述清除 Unmanaged 資源的建議設計模式。
參考
System.GC
提供與系統記憶體回收行程互動的方法。Object.Finalize
讓物件在記憶體回收行程回收物件之前嘗試釋放資源並且執行其他清除作業。System.IDisposable
提供資源類別的功能。
相關章節
- 記憶體回收技術範例
介紹 .NET Framework 記憶體回收行程的功能。