首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >expat解析器:内存消耗

expat解析器:内存消耗
EN

Stack Overflow用户
提问于 2009-03-18 12:17:05
回答 4查看 1.5K关注 0票数 0

我正在使用expat解析器解析一个大约15 GB的XML文件。问题是它抛出一个“内存不足”错误,程序中止。

我想知道有没有什么机构遇到过类似的问题,或者它是一个已知的bug,并在后来的版本中得到了纠正?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-18 12:49:28

我以前使用expat解析过大文件,从来没有遇到过任何问题。我假设您使用的是SAX,而不是expat DOM包装器。如果您使用的是DOM,那么这就是您的问题所在--它本质上是试图将整个文件加载到内存中。

您是否在解析XML时分配对象,而不是释放它们?这将是我要检查的第一件事。检查问题是否真的与expat有关的一种方法是-如果您将程序简化为具有空标记处理程序的简单版本(即,它只解析文件,而不对结果做任何操作),它仍然会耗尽内存吗?

票数 2
EN

Stack Overflow用户

发布于 2009-03-18 12:31:45

我一点也不了解expat,但我猜出于某种原因,它必须在内存中保存太多的状态。XML mal是以某种方式形成的吗?你有为大块的结束标记注册的处理程序吗?

我在想,如果你有一个为大块的末尾注册的处理程序,而expat期望将块传递给处理程序,那么expat可能在它能够完全收集该块之前就耗尽了内存。就像我说的,我不认识外国人,所以这可能是不可能的,我只是问问。

或者,您确定expat是内存丢失的地方吗?我可以想象这样一种情况:您保存了一些关于XML文件内容和您自己的数据结构的信息,或者是因为数据太大,或者是因为代码中的内存泄漏导致了内存不足的情况。

票数 1
EN

Stack Overflow用户

发布于 2009-03-18 13:06:50

Expat是一个事件驱动的解析器,它不会构造大的内存结构。所以它可能不是expat (它被广泛用于解析大文件)是问题所在--它更有可能是您自己的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/658016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档