Когда я запускаю следующий код в 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
}
что длина вашего массива файлов? в первом фрагменте кода вы используете два для петель, которые могут сбрасывать много запросов, одновременно вызывая нехватку памяти –
500 файлов. Каждый около 1,8 МБ –
, что вы можете сделать, это не объединить все файлы вместе. Что вы можете сделать, это использовать async.eachSeries, который будет управлять циклом из запросов на флеш. –