c# - 内存转储中的 .NET Pinning 句柄没有互操作性或已修复

标签 c# .net memory-leaks heap-memory

我正在调查生产中的内存转储,我看到很多引用“固定句柄”,如下面的屏幕截图(来自 Jetbrains dotMemory)所示。我们没有使用 fixed 并且我们没有对这段代码周围的非托管资源做任何事情所以我想问一下这怎么可能? SiteManager 类是单例的,所以有

private static SiteManager _instance;

代码中的字段,它永远保持对该对象的引用。但我看不出这会导致固定的任何原因。

enter image description here

最佳答案

对象数组很可能是用于存储静态引用的内部 CLR 对象之一。所以它不是固定的对象,它是固定静态引用的数组。

[编辑] 我说“很有可能”是因为我不知道你的程序。作为该程序的作者,如果您确定它不是“您的”object[],那么可以肯定它是一个保持“静态引用 GC 根”的数组。

Herehere你可以阅读一些关于 GC roots 的内容

但是没有关于对象数组的内容,因为它似乎是内部 .NET 实现细节。我从我作为 dotMemory 开发人员的经验中了解到这一点。

关于c# - 内存转储中的 .NET Pinning 句柄没有互操作性或已修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146060/

相关文章:

c# - 使用正则表达式抓取'\'之后的部分

c# - 检查身份验证票过期而不影响它

c# - 如何根据字符串动态调用类?

c# - 在不更新 Database First Entity Framework MVC 应用程序中的其他模型的情况下向模型 (edmx) 添加新表

c# - .NET 队列 ElementAt 性能

c# - 将多个值放入 Azure 移动服务的 WHERE 子句中

c - strlen 和 malloc : C memory leaks

delphi - Http 客户端获取请求

c# - 是否可以在调整频率的同时在 C# 中生成恒定的声音?

c++ - 使用QPixmap的Qt内存泄漏