【问题标题】:Compare memory footprint of alternative implementations比较替代实现的内存占用
【发布时间】:2012-03-27 12:56:07
【问题描述】:

我需要比较两个 xml 文档,并想弄清楚与 XmlDocument/XDocument 相比,XmlReader 开始产生显着的大小优势的数据大小。

天真地,我以为我可以简单地运行我的简单测试控制台,它使用两个不同的实现(一个基于 XmlDocument,另一个基于 XmlReader)比较两个 XML 文件的内容,同时使用工具进行分析。

我尝试使用 CLR 性能架构师提供的免费工具 CLR Profiler 4,但它完全没有给我任何信息。然后我下载了 ANTS Profiler 的试用版,但这也没有给我任何帮助!

我的测试文件 ATM 相当小,程序只是在两个文件中闪现然后退出。如果这很重要,它被实现为控制台。我无法理解为什么我从 ANTS 中得到“没有结果可显示”和从 CLR Profiler 中得到“0 字节分配”——两者似乎都只显示“实时”结果,但我想运行代码并分析什么后来发生了。

有没有一种简单的方法可以解决这个问题? GC 或相关类型是否公开了使其成为可能的功能?我主要对使用的总内存感兴趣,但也有兴趣查看是否创建了任何大对象(> 80KB,因此不可“碎片整理”)。

--

请避免使用样板“XmlReader 较小”或“XmlReader 占用空间平坦”的响应。我知道这一点。但是我需要确定收益的大小以及它变得重要的数据大小,以便在它们之间进行实际选择。仅仅知道 XmlReader 将“在某个时候”会“显着变小”是不够的。

【问题讨论】:

  • 首先,确保您正确使用这些程序。内存分析器通常要求您拍摄快照。这是它收集所有信息供您查看的时间。

标签: .net xml memory


【解决方案1】:

使用内存分析器,您通常会在有趣事件之前和之后拍摄 2 个快照,然后比较它们以查看内存使用情况和泄漏情况。因此,您可以在解析之前和之后(但在释放所有资源之前)向您的应用添加一些 Console.Read(),在这些时刻拍摄快照并进行比较。但是,如果您只需要查看内存使用情况,那么我认为您可以使用任务管理器或进程资源管理器来完成。

样品:

【讨论】:

  • 任务管理器/进程资源管理器可能会提供有关内存使用的大致想法,但严格来说,它们仅说明如何使用非托管内存。我不太了解 CLR 如何管理内存,但我知道它确实管理内存。例如,它将分配比完成小型托管内存分配所需的更多本机内存。同样,它可能会根据自己的想法释放内存,而不是在释放托管内存时直接释放内存。但最重要的是,这种“剖析”还远远不够详细,无法深入了解事物为何如此。
  • 我同意任务管理器,但现代进程资源管理器显示了许多有关 clr 进程和内存使用情况的信息。看看我添加到答案中的屏幕截图。
猜你喜欢
  • 2010-09-20
  • 2010-09-29
  • 1970-01-01
  • 2010-09-12
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多