【问题标题】:Understanding .NET Application Memory Size了解 .NET 应用程序内存大小
【发布时间】:2011-09-27 23:39:22
【问题描述】:

我正在处理的应用程序在启动后立即占用 338MB 私有字节和 780MB 虚拟字节。 我试图了解是什么占用了所有这些记忆。希望在了解之后,我将能够减小它的大小。 这是一个 32 位 C# 应用程序,上面的数字是在 Windows7 64 位上运行时获取的。

使用 windbg 打开转储显示堆大小为 47MB。 应用程序加载的外部库文件总大小为 60MB。

一个空的 c# 应用程序只占用 10MB,那么是什么导致我的应用程序达到 338MB 私有字节? 而windows7为什么要分配780MB的虚拟内存?

任何指示都会有所帮助。

【问题讨论】:

  • 1.使用memory profiler 找出您的应用程序在哪里分配了大量内存。 2.看看this question的答案;也许它已经回答了您的部分问题。
  • 如果是应用程序分配内存,我不应该在堆中看到它吗? heep 只有 47MB。
  • 这是造成实际问题,还是出于好奇?
  • @John Saunders 这引起了实际问题,因为我写的尺寸是启动程序后的基本尺寸,但由于这是一个高清视频流和渲染相关的应用程序,内存增长很快。此外,这是一个 32 位应用程序,并且很快就达到了 ~1.5GB 的虚拟内存限制。
  • @galbarm:当达到内存限制时,究竟会发生什么?

标签: c# .net windows memory clr


【解决方案1】:

您可以使用VMMap,这是一个进程虚拟和物理内存分析实用程序 来自技术网站上的Windows Sysinternals

VMMap显示进程提交的虚拟内存类型的细分以及操作系统分配给这些类型的物理内存(工作集)的数量。除了内存使用的图形表示之外,VMMap 还显示摘要信息和详细的进程内存映射。强大的过滤和刷新功能让您可以识别进程内存使用的来源和应用程序功能的内存成本。

除了用于分析实时进程的灵活视图外,VMMap 还支持以多种形式导出数据,包括保留所有信息以便您重新加载的本机格式。它还包括启用脚本方案的命令行选项。

VMMap 是希望了解和优化其应用程序的内存资源使用情况的开发人员的理想工具

【讨论】:

  • 谢谢。这确实是我们现在要走的一个方向。我们注意到的第一件事是引用的程序集被加载了两次。这是一个已知问题,已在 .net4 中修复(参见此处:support.microsoft.com/kb/981266)。应用修补程序后,虚拟内存大小减少了 50MB,这是一个好的开始。
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2018-06-16
  • 2015-01-13
  • 2019-08-28
  • 1970-01-01
相关资源
最近更新 更多