一个数组可以处理多少个项目 node.js
Posted
技术标签:
【中文标题】一个数组可以处理多少个项目 node.js【英文标题】:how many items can a array handle node.js 【发布时间】:2019-02-10 14:20:43 【问题描述】:我正在尝试根据大约 500.000 行或更多行的 txt 文件将对象放入数组
我正在使用 require('readline') 来处理它,但是当达到第 470000 行(例如)没有错误、警告、通知时,处理会为自己“暂停”......
这是我的代码示例(原始代码填充 dataRow 对象,然后在达到第 411000 行时“暂停”):
let myList = [];
let lineReader = require('readline').createInterface(
input: require('fs').createReadStream(filePath).pipe(iconv.decodeStream('latin1'))
);
lineReader.on('line', function (line)
// here there are a lot more fields, but I have to cut off for this example
let dataRow = JSON.parse('"Agencia_Cobranca":"","Aliquota_ICMS":""');
myList.push(dataRow);
//this if is only to follow what is happen
if( myList.length %10000 == 0 || myList.length>420000)
console.log(" myList executed: ",myList.length, ' - ', JSON.stringify( myList[myList.length-1] ).length, ' - ' ,new Date() );
).on('close',function()
console.log('finished');
process.exit(0);
);
我正在使用这个命令行来执行
node --max-old-space-size=8192 teste
嗯...这就是结果,当达到这一行时屏幕就一直保持这种状态...永远不会结束并且没有错误:(
【问题讨论】:
什么操作系统?node.js
的哪个版本?什么配置?
你能节省多少内存?
v8.9.1,我的笔记本6G内存
看不到与行数有错误关系,我已经读过超过100万行的文件,测试另一个模块,使用fs.readfile
。
我没有读取行的问题,问题是将此内容存储在对象数组中
【参考方案1】:
您的堆栈/内存可能已满,并且以一种奇怪的方式出错。如果可能的话,我会建议你的程序更有效地使用内存,在你阅读它时做所有你需要做的事情,然后丢弃它。将其全部存储在内存中永远不会成为解决方案。
【讨论】:
我现在做了一个类似的代码,但是在 php 中,它可以工作,但在 nodejs 中它似乎比 php 更快(考虑到 nodejs 的“暂停”时刻)不幸的是【参考方案2】:如果您处理大量数据,请考虑使用数据库。将其存储在表中,然后查询您需要使用的数据会更高效。
【讨论】:
【参考方案3】:在 NodeJs(javascript 也是)中,数组对象的最大大小为 2^32 -1。只需尝试在 nodejs 应用程序中执行此操作
console.log(new Array(4294967295))
try
console.log(new Array(4294967296))
catch(err)
console.log(err);
【讨论】:
以上是关于一个数组可以处理多少个项目 node.js的主要内容,如果未能解决你的问题,请参考以下文章