2012-01-03 132 views
3

我正在使用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。

+0

聽起來像你需要考慮更多的內存使用在你的php.ini文件。在.ini文件中查找「memory_limit」並更改該值以允許您希望處理的最大文件。 – Aaron 2012-01-03 02:44:28

+0

您是否試圖將XML文件另存爲JSON文件?還是你需要整個把整個Javascript對象保存在內存中? – fent 2012-01-03 03:11:57

+0

我正在使用node.js - 我找不到提高內存限制的參數。 (人節點,很多的選項) – vik 2012-01-03 03:12:03

回答

8

您應該將文件流式傳輸到解析器中,畢竟這是流式解析器的全部要點。

var parser = require('sax').createStream(strict, options); 
fs.createReadStream(file).pipe(parser); 
+0

這是如果你不想/需要整個文檔在內存中的方法。實際上Node並不是一個很好的解決方案,因爲它是單線程的。因此,在解析這個龐大的文檔時,該流程將無法執行其他任何操作,例如響應HTTP請求。 – danmactough 2012-01-03 11:57:14

+0

@danmactough,你會推薦使用什麼?目前這個解決方案非常棒,適合我。我瀏覽那份文件,讓我的工作人員做一次性工作,這並不重要。 – vik 2012-01-03 13:03:17

+0

@DeaDEnD,謝謝。您或其他人是否知道如何在該解析器上發出結束信號,因此解析器停止並解析器.onend會在解析時調用? – vik 2012-01-03 13:06:09