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

我正在使用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内存分析器和固定


基础教程推荐
猜你喜欢
- C#实现泛型动态循环数组队列的方法 2023-05-16
- c# – 包含SqlGeometry的数据表导致存储过程执行失败…为什么? 2023-11-10
- Unity实现引导页效果 2023-02-15
- C#字符串String及字符Char的相关方法 2023-06-05
- c#-Windows窗体中通用事件处理程序的解决方法 2023-11-12
- C#使用Selenium的实现代码 2023-02-08
- C#获取App.Config配置项的方法总结 2023-01-22
- C#实现视频的批量剪辑功能 2023-07-18
- C#商品管理系统简易版 2023-05-22
- C#中IEnumerable接口介绍并实现自定义集合 2023-05-30