У меня была очень похожая проблема. Я читал в очень большом CSV-файле с 10M строк и выписывал его эквивалент JSON. В диспетчере задач Windows я увидел, что мой процесс использует> 2 ГБ памяти. В конце концов я понял, что выходной поток, вероятно, медленнее, чем входной поток, и что этот поток буферизировал огромное количество данных. Я смог это исправить, останавливая инстрим каждые 100 записей в аутстрим и ожидая, пока аутсайд опустеет. Это дает время для опережающего действия, чтобы догнать его. Я не думаю, что это имеет значение для обсуждения, но я использовал readline для обработки csv-файла по одной строке за раз.
Я также выяснил, что если вместо записи каждой строки в выходной поток я объединю около 100 или около того строк вместе, а затем записываю их вместе, это также улучшило ситуацию с памятью и ускорило работу.
В конце концов, я обнаружил, что могу передавать файлы (csv -> json), используя только 70 МБ памяти.
Вот фрагмент кода для моей функции записи:
var write_counter = 0;
var out_string = "";
function myWrite(inStream, outStream, string, finalWrite) {
out_string += string;
write_counter++;
if ((write_counter === 100) || (finalWrite)) {
// pause the instream until the outstream clears
inStream.pause();
outStream.write(out_string, function () {
inStream.resume();
});
write_counter = 0;
out_string = "";
}
}