共用方式為


記憶體回收

更新: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 參數,以避免仍有記憶體可供系統使用時,就發生明顯的記憶體不足問題。

在本節中

參考

  • System.GC
    提供與系統記憶體回收行程互動的方法。

  • Object.Finalize
    讓物件在記憶體回收行程回收物件之前嘗試釋放資源並且執行其他清除作業。

  • System.IDisposable
    提供資源類別的功能。

相關章節