【问题标题】:MSXML memory managementMSXML 内存管理
【发布时间】:2010-11-29 08:51:28
【问题描述】:

我正在使用微软提供的 COM 和 XML 解析器来解析大约 20 个 XML 文件。该应用程序还使用库提供的 API 来解析 XML 文档。

MSXML3.0 解析器似乎正在消耗大量内存用于缓存(垃圾收集)。即使垃圾的概念是在缓存中引用相同的 XML 文档,如果有任何将来的引用,但在这里它再次加载相同的 XML 文档多次,这反过来又增加了我的应用程序的内存使用量。

我还尝试使用 DevPartner 工具进行调试,但它似乎并没有帮助我解决这个问题。因为它没有显示任何内存泄漏,但任务管理器中的内存使用量不断增加。

我是通过以下链接了解垃圾收集的:

http://support.microsoft.com/kb/304227

它告诉通过更改 redit 条目“NoFullGC”来禁用垃圾收集,我按照这个来找到这个键,但我找不到它。我什至在注册表中都找不到MSXML3.0。

我觉得奇怪的另一件事是,一旦我最小化应用程序窗口,这个进程分配的内存就会被释放。 (这对我来说很奇怪)。

请帮我解决这个问题。

【问题讨论】:

  • 我觉得奇怪的另一件事是,一旦我最小化应用程序窗口,这个进程分配的内存就会被释放。 (这对我来说很奇怪)。
  • 您正在查看当您最小化窗口时被 Windows 清空的“工作集”。通常最好查看“提交大小”数字(或 XP 及更早版本中的“虚拟机大小”),即您要求的内存量(工作集是 Windows 给您的量)。

标签: memory msxml


【解决方案1】:

GC 并不意味着内存泄漏。因此,内存诊断工具在这里无法提供帮助 - 或者它一定是误报。

为了减轻 GC 的内存消耗,您可能需要:

  • 如果可能,切换到XmlLite。它适用于所有受支持的 Windows。
  • 尝试使用知识库文章中指定的 DllCanUnloadNow 强制 GC。

我不确定最小化窗口如何启动 GC,但那肯定启动了 GC,以便之后回收内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2012-03-21
    相关资源
    最近更新 更多