如何获取当前在ThreadLocal
或ThreadStatic
存储中保留的所有引用的列表?
即。所有不能被垃圾收集的对象,因为某个线程在thread-local storage中保存了对该对象的引用。
我可以使用反射来查找这些实例,或者至少是它们的总大小,而不知道它们的名称或类型吗?
或者失败了,某种方式在Visual Studio 2010中显示它们? (我正在寻找除了完整的内存分析器之外的东西)
我的动机是:我只是有一个非常讨厌的内存泄漏,其中ConcurrentBag
的内容由各种ThreadPool线程保存,即使最初的ConcurrentBag已经超出范围并且收集了垃圾。虽然我压扁了这个特殊的bug,但我想知道是否还有更多这样的bug。
理想情况下,我想在运行时定期记录线程局部存储所拥有的对象数量及其大小。
答案 0 :(得分:2)
不幸的是没有办法做到这一点。
您应该确保使用IDisposable实现清理并在适当的地方使用(某些IDisposable)。
框架本身会为您计算引用,但没有API将此信息公开给正在运行的代码。