Node.js循环-流内存不足

时间:2019-07-30 09:34:47

标签: node.js nodejs-stream

我正在生成一个我想保存的CSV文件。 它有点大,但是代码非常简单。 我使用流来防止出现内存不足错误,但是无论如何都会发生。 有提示吗?

const fs = require('fs');
var noOfRows = 2000000000;
var stream = fs.createWriteStream('myFile.csv', {flags: 'a'});
for (var i=0;i<=noOfRows;i++){
  var col = '';
  col += i;
  stream.write(col)
}

3 个答案:

答案 0 :(得分:2)

添加一个drain事件监听器。

const fs = require("fs");
var noOfRows = 2000000000;
var stream = fs.createWriteStream("myFile.csv", { flags: "a" });
var i = 0;

function write() {
  var ok = true;
  do {
    var data = i + "";
    if (i === noOfRows) {
      // last time!
      stream.write(data);
    } else {
      // see if we should continue, or wait
      // don't pass the callback, because we're not done yet.
      ok = stream.write(data);
    }
    i++;
  } while (i<=noOfRows && ok);
  if (i < noOfRows) {
    // had to stop early!
    // write some more once it drains
    stream.once("drain", write);
  }
}

write();

noOfRows太大,可能导致.csv文件大小超出磁盘大小

答案 1 :(得分:0)

您的.csv文件中有太多数据要保留在流中。 Streams基本上会使用计算机的物理内存,因此它只能存储最多可用的物理内存。例如如果您的计算机有8GB的RAM,可以说6GB的可用空间,则流不能存储超过6GB的内存。您可以将其分解为多个块,然后稍后将其合并回目的地。

答案 2 :(得分:0)

.csv文件没有大小限制。在任何情况下,限制都是文件系统/硬盘大小。

  

文件系统上任何文件的最大文件大小由   文件系统本身-不受文件类型或文件名后缀的限制。

为防止内存不足错误check you file size limit as per your filesystem partition

相关问题