2015-09-05 55 views
0

我有一個web應用程序,通過無盡的流(或至少很長的流)與實時數據一起工作。我正在使用'data'事件來解析此流上的新塊數據。問題是,當這個流處於活動狀態時,我的內存消耗增加。由於我不爲這個流調用.read方法,所有數據都存儲在流緩衝區中等待處理。所以,我想問,我能做些什麼來減少我的內存消耗?禁用此流的內部緩衝(我不需要舊數據),從innerBuffer或mb通過.read方法工作中刪除處理的數據?任何意見讚賞。Nodejs正確的方式來閱讀層出不窮

.on('data', function(chunk) { 
    parseString(chunk, function (err, result) { 
    //... 
    }); 
}) 
+0

您有使用舊式流的原因嗎?最好使用'read()'而不是'data'事件。 –

+0

不是。我很久以前寫過這個部分,直到生產完成,工作狀況良好 – BadVolt

回答

0

使用data事件是有危險的,因爲這個原因。它會盡可能快地將數據轉儲給你。面對異步操作,這可能比您可以處理它更快,在這種情況下,您的內存使用量將穩步增加。您可以通過使用pause/resume很容易地解決這個問題:

stream.on('data', function(chunk) { 
    stream.pause(); 
    parseString(chunk, function (err, result) { 
    //... 
    stream.resume(); 
    }); 
}) 

您還可以通過僅當有已經運行nparseString操作暫停添加並行。

你也可能想看看新式流,通常是首選。

相關問題