2009-05-19 117 views
2

有沒有一種方法可以知道誰擁有對象的引用?有沒有一種方法可以知道誰擁有對象的引用?

我看到我的對象在調用GC.Collect後沒有被最終確定。

+1

你爲什麼叫GC.Collect?不要擔心清理內存,除了內存以外的其他資源,你應該實現IDisposable和Dispose。 – 2009-05-19 13:56:02

回答

2

你應該叫GC.WaitForPendingFinalizersGC.Collect後,讓垃圾回收清除freachable隊列。由於GC運行在不同的線程中,當GC嘗試完成任何需要完成的對象時,您的應用程序可能已經移動。通過調用GC.WaitForPendingFinalizers,您將迫使當前線程等待GC完成清理可擴展隊列(需要完成的項目隊列),然後再恢復執行。

然而,這是說,我同意Joel Coehoorn的評論 - 當你獨自一人時,GC的效果最好。

2

除了Windbg,您還可以使用.net分析器。我已經完成了這兩方面的工作 - 配置文件不會告訴你Windbg無法做到的任何事情,但一個好的配置文件更友好一些。

Windbg 除了JaredPar的鏈接外,Tess Ferrandez還提供了一些有關.net使用Windbg的精彩文章。這裏的AA內存泄漏文章:http://blogs.msdn.com/tess/archive/2006/01/23/516139.aspx

探查: 我有很大的運氣與賽特的分析器(我沒有以任何方式,偉大的工具關聯,雖然): http://memprofiler.com/

他們有一些偉大的如何 - 也可以在他們的網站上觀看視頻。

相關問題