所有活动的ThreadLocal <t>和[ThreadStatic]引用的列表

时间:2016-06-28 08:28:58

标签: c# multithreading reflection static .net-4.0

如何获取当前在ThreadLocalThreadStatic存储中保留的所有引用的列表?

即。所有不能被垃圾收集的对象,因为某个线程在thread-local storage中保存了对该对象的引用。

我可以使用反射来查找这些实例,或者至少是它们的总大小,而不知道它们的名称或类型吗?

或者失败了,某种方式在Visual Studio 2010中显示它们? (我正在寻找除了完整的内存分析器之外的东西)

我的动机是:我只是有一个非常讨厌的内存泄漏,其中ConcurrentBag的内容由各种ThreadPool线程保存,即使最初的ConcurrentBag已经超出范围并且收集了垃圾。虽然我压扁了这个特殊的bug,但我想知道是否还有更多这样的bug。

理想情况下,我想在运行时定期记录线程局部存储所拥有的对象数量及其大小。

1 个答案:

答案 0 :(得分:2)

不幸的是没有办法做到这一点。

您应该确保使用IDisposable实现清理并在适当的地方使用(某些IDisposable)。

框架本身会为您计算引用,但没有API将此信息公开给正在运行的代码。