2014-01-20 88 views
1

我想讀取文件並處理文件的每一行。我使用readStream來讀取文件,然後調用processRecord方法。 processMethod需要進行多次調用,並且需要在寫入商店之前製作最終數據。在節點中讀取文件並處理相同的文件

該文件有500K條記錄。

我面臨的問題是,文件讀取速度很快,我相信節點沒有獲得足夠的優先級來實際處理processLine方法。因此,內存高達800MB,然後減慢。

任何幫助表示讚賞。

那Im使用在下面給出的代碼 -

var instream = fs.createReadStream('C:/data.txt'); 
var outstream = new stream; 

var rl = readline.createInterface({ 
    input: instream, 
     output: outstream, 
     terminal: false 
}); 
outstream.readable = true; 

rl.on('line', function(line) { 

processRecord(line); 
    } 
+0

按照下面的評論,嘗試署名包,它具有相同的問題readline的 – Vaya

回答

0

Node.js的readline的模塊旨在比線由行從文件流更多的用戶交互。您可能會更喜歡流行的byline包裝。

var fs = require('fs'); 
var byline = require('byline'); 

// You'll need to check the encoding. 
var lineStream = byline(fs.createReadStream('C:/data.txt', { encoding: 'utf8' })); 

lineStream.on('data', function (line) { 
    processRecord(line); 
}); 

如果將數據傳送到另一個流,您將有更好的機會避免內存泄漏。我在這裏假設processRecord正在融入其中。如果你製作了a transform stream object,那麼你可以使用管道。

var out = fs.createWriteStream('output.txt'); 

lineStream.pipe(processRecordStream).pipe(out); 
+0

的署名也呈現出與readline的同樣的問題。 – Vaya

+0

這可能是processRecord的問題。它對數據做了什麼?你可能會保留引用和泄漏內存。如果可以的話,就像我在我的答案的第二部分中所建議的那樣,嘗試將它變成變換流。 – qubyte

相關問題