2015-09-27 59 views
0

在c#中,將類中的所有事件處理函數設置爲null,以確保沒有內存泄漏可以發生?在類的析構函數中將事件設置爲null

例如:

~SomeClass() 
{ 
    OnLoaded = null; 
    OnUnloaded = null; 
} 

或者這真的是不好的做法?

謝謝!

回答

1

簡答:這是一個不好的做法。

您應該只使用終結器來清理非託管資源。 垃圾收集器可以處理所有的管理對象。

實現不必要的終結器會傷害性能,因爲垃圾回收器有更多的工作要做。具有終結器的對象將從內存中釋放2個垃圾回收。

Finalize方法在垃圾收集器從內存釋放對象之前執行。它只會在你的程序中無法訪問該對象時才這樣做 - 所以其他對象也不能通過此對象所持有的引用到達。將引用設置爲null不會改變任何內容。

您可以找到有關MSDN上的垃圾收集(https://msdn.microsoft.com/en-us/library/vstudio/ee787088(v=vs.110).aspx)或埃裏克利珀的博客更多的信息(例如http://ericlippert.com/2015/05/18/when-everything-you-know-is-wrong-part-one/

+0

它是確定將所有事件空的窗口(WPF)關閉事件,可以肯定的對象可以被收集和最終確定?謝謝! – BendEg

相關問題