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

问题描述 投票:2回答:1

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

private static SiteManager _instance;

代码中的字段,永远引用该对象。但我没有看到任何理由导致钉扎。

enter image description here

c# .net memory-leaks heap-memory
1个回答
1
投票

最有可能的是,对象数组是用于存储静态引用的内部CLR对象之一。所以它不是你的对象固定,它的数组保持静态参考固定。

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

Herehere你可以读一点GC根源

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

© www.soinside.com 2019 - 2024. All rights reserved.