.NET 在内存转储中固定句柄,没有互操作或固定

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

private static SiteManager _instance;

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

http://img.mukewang.com/6354d2890001757804960472.jpg

Qyouu
浏览 94回答 1
1回答

ABOUTYOU

最有可能的是,对象数组是用于存储静态引用的内部 CLR 对象之一。所以它不是你的对象固定,它是保持静态引用固定的数组。[编辑] 我说“最有可能”是因为我不知道你的程序。如果你作为这个程序的作者,确定它不是“你的” object[],那肯定它是一个保持“静态引用 GC 根”的数组。在这里和这里你可以阅读一些关于 GC 根的信息但是由于内部.NET 实现细节似乎没有关于对象数组的内容。我从我作为 dotMemory 开发人员的经验中了解到这一点。
打开App,查看更多内容
随时随地看视频慕课网APP