gpt4 book ai didi

c# - .Net 内存分析器和 固定

转载 作者:行者123 更新时间:2023-11-30 16:24:58 27 4
gpt4 key购买 nike

我正在使用 Scitech 的 .Net Memory Profiler 检查我的应用程序(在 WinXP 64 上运行)中的一些内容。我看到很多情况下,我的应用程序使用的列表只有一个实时实例,它始终为 32 字节并显示为数组(例如 Products[])。

当我仔细查看实例时,它看起来并没有被任何东西引用。如果我选中“仅显示根路径中包含的实例”复选框,则引用列表为空。如果我取消选中该复选框,我只会看到:

Object[]    #307[9126]
<GCHandle> #306 {Pinned}

分配调用堆栈如下所示:

mscorlib!System.Collections.Generic.List<T>..cctor()
[Skipped frame(s)]
mscorlib!System.Collections.ObjectModel.Collection<T>..ctor()
MyApp.ProductsAdmin!MyApp.ProductsAdmin.ViewModels.ProductsAdminViewModel..ctor() ProductsAdminViewModel.cs

看起来它刚刚结束于空列表的构建。当根路径中不包含任何实例并且我看到的只是已固定时,这意味着什么?

最佳答案

原因是List静态构造函数分配了一个空的T数组。使用Reflector看一下它的代码:

static List()
{
List<T>._emptyArray = new T[0];
}

关于c# - .Net 内存分析器和 <GCHandle> 固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10343778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com