我使用expat解析器解析大约15 GB的XML文件。的问题是它会抛出“内存的”错误,以及程序中止。

我想知道有任何机构面临着类似的问题与Expat或者是一个已知的bug和更高版本中已经解决了吗?

有帮助吗?

解决方案

我用外籍前解析大文件,从未发生过任何问题。我假设你正在使用SAX而不是外籍DOM包装之一。如果使用的是DOM,那么这就是你的问题就在那里 - 这将是本质上试图将整个文件加载到内存

如您解析XML,也许不会重新分配他们,你分配对象?这将是我会检查的第一件事。检查的一种方式,如果这个问题真的有外籍人士或没有 - 如果减少程序的简单版本,具有空标签处理器(即它只是解析文件,所以没有任何的结果),它仍运行内存不足?

其他提示

我不知道外籍人士所有,但我猜想,它在内存中保存太多的状态,出于某种原因。形成以某种方式XML发作?你有大块的结束标记注册的处理程序?

我在想,如果你有一个大的块的结束注册一个处理程序,以及外籍人士预计该块传递到处理程序,那么外籍人士可运行内存它能够完全收集该块前。正如我所说的,我不知道外籍人士,所以这可能是不可能的,我只是问。

或者,你确定外籍是在记忆丧失?我能想象你在哪里保持对XML文件的内容,以及您自己的数据结构的一些信息的情况下,或者是因为数据是如此之大,还是因为在你的代码的内存泄漏,导致内存不足。

外籍是事件驱动型的解析器不构建大型的存储器内的结构。因此,它可能不是外籍人士(这是很广泛用于解析大文件),这就是问题所在 - 更可能是你自己的代码

外籍人士有漏洞 - 我在长时间运行的服务器开始使用它,而且我发现它始终泄漏内存,解析器是否被释放与否。最近xmlparse.c的版本不解决这个问题,只能隐藏现有泄漏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top