2

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

在 150MB 的私有工作者集内存中

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

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

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

提前致谢

4

1 回答 1

3

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

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

于 2013-11-05T10:26:43.977 回答