0
在c#中,將類中的所有事件處理函數設置爲null,以確保沒有內存泄漏可以發生?在類的析構函數中將事件設置爲null
例如:
~SomeClass()
{
OnLoaded = null;
OnUnloaded = null;
}
或者這真的是不好的做法?
謝謝!
在c#中,將類中的所有事件處理函數設置爲null,以確保沒有內存泄漏可以發生?在類的析構函數中將事件設置爲null
例如:
~SomeClass()
{
OnLoaded = null;
OnUnloaded = null;
}
或者這真的是不好的做法?
謝謝!
簡答:這是一個不好的做法。
您應該只使用終結器來清理非託管資源。 垃圾收集器可以處理所有的管理對象。
實現不必要的終結器會傷害性能,因爲垃圾回收器有更多的工作要做。具有終結器的對象將從內存中釋放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/)
它是確定將所有事件空的窗口(WPF)關閉事件,可以肯定的對象可以被收集和最終確定?謝謝! – BendEg