c# - 所有事件的 ThreadLocal<T> 和 [ThreadStatic] 引用的列表

标签 c# multithreading reflection static .net-4.0

我怎样才能得到当前保存在 ThreadLocal 中的所有引用文献的列表?或 ThreadStatic存储?

即所有不能被垃圾回收的对象,因为某个线程在其 thread-local storage 中持有对该对象的引用.

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

或者失败了,有什么方法可以在 Visual Studio 2010 中显示它们? (我正在寻找除了成熟的内存分析器之外的东西)

我的动机是这样的:我刚刚发生了一次非常严重的内存泄漏,其中 ConcurrentBag 的内容由各种 ThreadPool 线程持有,即使原来的 ConcurrentBag 早已超出范围并被垃圾收集。虽然我解决了这个特殊的错误,但我想知道是否还有更多这样的错误潜伏在周围。

理想情况下,我希望通过某种方式在运行时定期记录线程本地存储所持有的对象数量及其大小。

最佳答案

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

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

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

关于c# - 所有事件的 ThreadLocal<T> 和 [ThreadStatic] 引用的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38070948/

相关文章:

c# - 如何使用 Selenium webdriver 获取不在 html 标签内的元素文本

c# - 通过非安全通道加载内容

c# - 表单丢失后无法获得焦点

java - Executor Service 上的异步进程

c# - 在 .net 中隐藏私有(private)字段以防止反射

c# - 错误 : "Cannot implicitly convert type"

java - Spring Security 子线程上下文

python - Pool.map 挂起——如何进行异常处理

Java 反射遍历嵌套对象并列出和更新字段

java - Java 反射中的“[L”前缀