2014-01-20 3 views
1

파일을 읽고 파일의 각 행을 처리하려고했습니다. readStream을 사용하여 파일을 읽고 processRecord 메서드를 호출했습니다. processMethod는 여러 호출을해야하고 최종 데이터를 저장소에 기록하기 전에 만들어야합니다.노드의 파일 읽기 및 동일한 파일 처리

파일의 레코드가 500,000 개입니다.

임씨가 직면 한 문제는 상당한 속도로 파일을 읽었으며 실제로 노드가 processLine 메서드를 실제로 처리하기에 충분한 우선 순위를 얻지 못한다고 생각합니다. 따라서 메모리는 최대 800MB를 촬영 한 다음 속도가 느려집니다.

도움을 주시면 감사하겠습니다. 필자는 아래와 같습니다 사용

코드 -

Node.js를 작성한 Readline 모듈은 라인별로 파일을 스트리밍 이상의 사용자 상호 작용에 대한 더 많은 것입니다
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

. 인기있는 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