c# - 查找 .NET 应用程序中的非托管内存泄漏

标签 c# .net

我创建了一个读取文件并获取文件元数据的应用程序。当我启动应用程序时,专用工作集约为 8MB(如任务管理器中所示)。当我扫描文件时,内存猛增至 150MB,并一直保持不变。如果我使用应用程序的同一实例添加其他文件,内存就会堆积起来。为了理解这种行为,我使用了内存分析器(红色门),它向我显示了以下统计数据:-

150MB 私有(private)工作集内存

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

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

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

提前致谢

最佳答案

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

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

关于c# - 查找 .NET 应用程序中的非托管内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15828979/

相关文章:

c# - 将输出文件保存到用户文件夹

c# - 使用 LINQ 的 MongoDB C# 聚合

.net - 将代理与 .NET 4.5 HttpClient 一起使用

.net - C# 中的 Settings.settings 用于连接字符串

.NET EPPlus OpenXml - 在每个页面上重复 Excel 行

.net - 为什么我们需要 IComparable 接口(interface)?

c# - 使用 C# 以编程方式添加新的颠覆用户

c# - 将 C 结构从 dll 转换为 C#

c# - 是否可以以某种方式创建 Foo<T> 对象的集合,其中 T 被限制为不可空类型?

.net - 正则表达式 - 重复组