我有一個執行復雜處理并創建太多對象的應用程序,我想在處理完成后釋放內存。我目前正在我的應用程序中的 try catch 塊中調用 GC.collect,并且// 這個函數在靜態類中public static void Collect(){ try { GC.Collect } catch(Exception) { // }}這是調用垃圾收集器的正確方法嗎?我應該直接調用它嗎?什么是最佳使用實踐?
2 回答

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
C# 是一種垃圾收集語言。垃圾收集器為您分配資源,并在不再使用時回收它們。
GC.Collect()
除非你有充分的理由,否則你根本不應該調用- 垃圾收集器很聰明,并且只會在它認為需要時運行。
這可以由多種情況觸發,如文檔中所示:
當滿足以下條件之一時,就會發生垃圾收集:
系統物理內存不足。這是通過操作系統發出的內存不足通知或主機指示的內存不足來檢測的。
托管堆上分配的對象使用的內存超過了可接受的閾值。該閾值隨著進程的運行而不斷調整。
調用 GC.Collect 方法。在幾乎所有情況下,您不必調用此方法,因為垃圾收集器連續運行。此方法主要用于特殊情況和測試。
重要的是,垃圾收集可以導致所有正在運行的線程暫停,以便它可以分析堆中的所有對象以查看它們是否仍然需要。這需要時間,如果您在不需要時頻繁運行它,可能會對程序的性能產生負面影響。

慕的地10843
TA貢獻1785條經驗 獲得超8個贊
您不需要將其包裝在public static
方法中,只需在需要時調用它即可:
//?Time?to?release?memory! GC.Collect();
- 2 回答
- 0 關注
- 523 瀏覽
添加回答
舉報
0/150
提交
取消