のために、私は次のようなエラーメッセージが出ます:私はNode.jsの中で、次のコードを実行するとJavascriptのメモリリークがループ
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
//Running this code causes program to run out of memory.
for(var i = 0; i < files.length; i++){
readFile(files[i]);
}
//log each line of file to console
function readFile(data){
var lines = fs.readFileSync(data).toString().split('\n');
for(var k = 0; k < lines.length; k++){
console.log(lines[k]);
}
}
をしかし、私はreadFileの機能を変更し、ための蚊帳の外console.log(lines[k])
を取る場合致命的なエラーはなくなります。何故ですか?そして、元のコードを修正してメモリ不足を防ぐ方法はありますか?
function readFile(data){
var lines = fs.readFileSync(data).toString().split('\n');
var string = ''
for(var k = 0; k < lines.length; k++){
//console.log(lines[k]);
string += lines[k];
}
console.log(string); //log the same string outside the loop and the fatal error goes away
}
ファイルの配列の長さは何ですか?最初のコードでは2つのforループを使用しており、多くのリクエストを一緒にフラッシュしてメモリ不足の原因となります –
500ファイル。それぞれの約1.8mb –
あなたができることは、すべてのファイルを一緒にフラッシュしないことです。あなたができることは、flushリクエストからループを制御するasync.eachSeriesを使うことです。 –