标签:memory-leaks memory-profiling c net
我正在使用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];
}
标签:memory-leaks,memory-profiling,c,net 来源: https://codeday.me/bug/20191201/2080559.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。