在.NET应用程序中查找非托管内存泄漏

时间:2013-04-05 08:14:09

标签: c# .net

我创建了一个应用程序,它读取文件并获取文件的元数据。当我启动应用程序时,私有工作集大约为8MB(在任务管理器中查看)。当我扫描文件时,内存最高可达150MB并保持不变。如果我使用应用程序的相同实例添加其他文件,则内存堆积在上面。为了理解这种行为,我使用了一个内存分析器(Red gates),它向我展示了以下统计数据: -

150MB的私人工作者设置内存

  • 非托管内存:94MB
  • 其他资源(字符串,数组等):30MB

这让我很困惑,因为我没有使用任何未托管的代码,也没有任何Pinvoke调用。我也尝试过GC.Collect()但没有成功。

有人可以指导我如何减少我的应用程序的非托管内存使用情况以及可能的原因。

先谢谢

1 个答案:

答案 0 :(得分:3)

最近对ANTS的更新显示了您的应用程序使用的非托管内存的.NET类。在设置屏幕中启用非托管内存分析后,导航到班级列表并按新的“非托管大小”进行排序。列。

虽然您可能没有故意使用非托管内存,但许多.NET Framework库确实使用本机资源 - 例如映像库。