我想读取文件并处理文件的每一行。我使用readStream读取文件,然后调用processRecord方法。 processMethod需要进行多次调用,并且需要在将最终数据写入存储之前进行。
该文件有500K记录。
我面临的问题是,文件以极快的速度读取,我相信节点没有获得足够的优先级来实际处理processLine方法。因此,内存最高可达800MB然后慢下来。
感谢任何帮助。
我使用的代码如下 -
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 :(得分: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);