这是我第一次使用相当多的内存,我发现了一个奇怪的现象。
我正在阅读大小为43MB
的excel文件并将其保存在数组中。我想我可能需要寻找一种方法来流向客户端,但我仍然很好奇。
我通过运行node excelParserTool.js --max-old-space-size=10000
运行我的代码来为我的程序分配10GB
内存。
以下是我的代码
let csvWriter = () => {
let workbook = new Excel.Workbook();
console.log(`before reading ${JSON.stringify(process.memoryUsage())}`);
workbook.xlsx.readFile('myfile').then((err, data) => {
console.log(`after reading ${JSON.stringify(process.memoryUsage())}`);
workbook.eachSheet((worksheet, sheetId) => {
let writeStream = fs.createWriteStream(`./sheet${sheetId}`);
worksheet.eachRow({includeEmpty: true}, (row, rowNumber) => {
let eachRow = '';
row.eachCell({includeEmpty: true}, (cell, colNumber) => {
if(cell.value !== null && typeof cell.value === 'object'){
eachRow += JSON.stringify(cell.value) + ', ';
}else if(cell.value === null){
eachRow += ', ';
}else {
eachRow += cell.value + ', ';
}
console.log(`through each cycle ${JSON.stringify(process.memoryUsage())}`)
});
eachRow += '\n';
writeStream.write(eachRow);
});
writeStream.end();
})
})
};
重点是,对于每行读取,我打印process.memoryUsage()
以便我可以看到正在消耗多少内存。但是,当程序死亡时,Javascript heap out of memory
表示最后的内存使用量为through each cycle {"rss":1549365248,"heapTotal":1509969920,"heapUsed":1479087128,"external":3724116}
使用的Heaptotal和堆只有大约1.5Gb,远低于我为该程序分配的内容。此外,当我看到我的计算机统计数据时,仍然可以使用超过7gbs。这是为什么?
答案 0 :(得分:1)
您将内存标志设置在错误的位置
node [options] [-e script | script.js] [参数]
所以在你的情况下它应该是node --max-old-space-size=10000 excelParserTool.js