2009-05-19 89 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/

他们有一些伟大的如何 - 也可以在他们的网站上观看视频。

相关问题