如何在.NET中釋放內存?它是正確的事:如何在.NET中釋放內存?
myArray = null;
GC.Collect();
或
myArray = Nothing
GC.Collect()
或者我應該永遠等待垃圾回收時,操作系統是準備發生?
謝謝。
如何在.NET中釋放內存?它是正確的事:如何在.NET中釋放內存?
myArray = null;
GC.Collect();
或
myArray = Nothing
GC.Collect()
或者我應該永遠等待垃圾回收時,操作系統是準備發生?
謝謝。
這些都不會做你想要的。 在託管運行時,釋放引用使用的內存是非確定性的,它完全取決於垃圾收集器運行的時間和使用哪個策略。 因此,對於常規類型,不要做任何事情,只需放鬆並寫下您的業務代碼即可。
作爲一種最佳實踐,只需等待GC收集未使用的資源即可。 GC非常智能,足以知道何時應該進行收集。強制GC運行成本很高。
根據MSDN對GC.Collect的頁面():
的所有對象,不管他們多久了記憶,被認爲是收集;但是,託管代碼中引用的對象不會收集。使用此方法強制系統嘗試回收可用內存的最大數量。
這意味着你刪除從參考的內存,如果沒有其他的引用可能被釋放。儘管如此,您應該意識到該函數可能需要很長時間(從程序的角度來看)才能運行,所以您可能不想自己調用它:如果最終嘗試執行該操作,則可能會執行不必要的冗餘工作並大幅減慢您的應用程序。無論如何,如果它是有益的,它應該很快發生。如果你真的想要確定性的破壞,可以考慮加入一些C++,並使用「真正的」堆而不是GC編輯的堆。
爲什麼你不應該關心,而不是放鬆保持由this
你只需要處理非託管對象的編寫代碼怎麼一回事,因爲它已經照顧。 – Phill 2010-12-02 06:12:47