當我在node.js中運行下面的代碼我收到以下錯誤信息:JavaScript中的內存泄漏在for循環
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])
出來的for循環,致命的錯誤消失。這是爲什麼?我怎樣才能修復原始代碼,使其停止內存不足?
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
}
什麼是你的文件數組的長度?在第一段代碼中,您使用了兩個for循環,這些循環可能會同時沖刷很多請求,從而導致內存不足 –
500個文件。每個約1.8mb –
你可以做的是不要衝洗所有文件在一起。你可以做的是使用async.eachSeries來控制flush請求的循環。 –