我正在使用isaacs' SAX解析一个巨大的XML文件。也recommended by La Gentz。用node.js解析大型XML 500M
该过程使用大约650M的内存,我该如何减少这个或允许节点使用更多。
FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory
我的XML文件大于300M,它可以增长到1GB。
我正在使用isaacs' SAX解析一个巨大的XML文件。也recommended by La Gentz。用node.js解析大型XML 500M
该过程使用大约650M的内存,我该如何减少这个或允许节点使用更多。
FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory
我的XML文件大于300M,它可以增长到1GB。
您应该将文件流式传输到解析器中,毕竟这是流式解析器的全部要点。
var parser = require('sax').createStream(strict, options);
fs.createReadStream(file).pipe(parser);
这是如果你不想/需要整个文档在内存中的方法。实际上Node并不是一个很好的解决方案,因为它是单线程的。因此,在解析这个庞大的文档时,该流程将无法执行其他任何操作,例如响应HTTP请求。 – danmactough 2012-01-03 11:57:14
@danmactough,你会推荐使用什么?目前这个解决方案非常棒,适合我。我浏览那份文件,让我的工作人员做一次性工作,这并不重要。 – vik 2012-01-03 13:03:17
@DeaDEnD,谢谢。您或其他人是否知道如何在该解析器上发出结束信号,因此解析器停止并解析器.onend会在解析时调用? – vik 2012-01-03 13:06:09
听起来像你需要考虑更多的内存使用在你的php.ini文件。在.ini文件中查找“memory_limit”并更改该值以允许您希望处理的最大文件。 – Aaron 2012-01-03 02:44:28
您是否试图将XML文件另存为JSON文件?还是你需要整个把整个Javascript对象保存在内存中? – fent 2012-01-03 03:11:57
我正在使用node.js - 我找不到提高内存限制的参数。 (人节点,很多的选项) – vik 2012-01-03 03:12:03