所有活动ThreadLocal和[ThreadStatic]引用
本文关键字:ThreadStatic 引用 活动 ThreadLocal | 更新日期: 2023-09-27 17:51:25
如何获得当前在ThreadLocal
或ThreadStatic
存储中保存的所有引用的列表?
。所有不能被垃圾收集的对象,因为某个线程在其线程本地存储中持有对该对象的引用。
我可以使用反射来找到这些实例,或者至少是它们的总大小,而不知道它们的名称或类型吗?
或者在Visual Studio 2010中以某种方式显示它们?(我正在寻找的东西除了一个全面的内存分析器)
我的动机是这样的:我刚刚有一个非常严重的内存泄漏,其中ConcurrentBag
的内容由各种ThreadPool线程持有,即使原来的ConcurrentBag早已不在范围内并被垃圾收集。虽然我已经解决了这个bug,但我想知道是否还有更多这样的bug潜伏在周围。
理想情况下,我希望有一些方法可以在运行时定期记录线程本地存储持有的对象数量及其大小。
遗憾的是,没有办法做到这一点。
您应该确保使用IDisposable实现并在适当的地方使用(某些IDisposable)进行清理。
框架本身会为你计算引用,但是没有API将这些信息暴露给运行的代码。