具有异步功能的 for 循环会耗尽内存
for-loop with async function runs out memory
在你开始大喊"不要将for循环与异步函数一起使用!"让我声明一下,我确实知道如何使用异步函数从回调中调用下一次迭代来编程循环。
但是,如果我对回调不感兴趣,或者只在前置任务完成后处理一次迭代。就我而言,我正在从xml文件中导入大量记录并将它们写入mongoDB。对我的"write"函数的正常调用是这样的:
asyncWrite( record, function(err, result) {
...
});
现在正如我所说,我对回调不感兴趣(不会发生错误!)也不对串行过程感兴趣。所以我使用了一个for循环并省略了回调:
for( i=0; i<max; i+=1) {
asyncWrite( record_arr[i] );
}
对于小max
,这非常有效。但是随着max
变大(> 100.000),我最终会得到"内存不足"错误。防止这种情况的唯一方法是回到"正常"异步循环(从回调中递归函数调用)。
还有其他想法吗?
在 for 循环完成其工作之前,不会执行异步函数。它刚刚收集了一个太乞求的队列。对于大max
您收到out of memory
错误,因为队列已满。您可以通过在循环中插入console.log(process.memoryUsage());
来查看内存泄漏的方式。您需要使用块来处理此任务。
相关文章:
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- XMLHttpRequest循环内存泄漏
- Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
- for 循环中的 JavaScript 内存使用情况
- 视图模型内存泄漏 - 摆脱循环依赖
- 游戏循环内存泄漏
- Javascript:带有循环的内存泄漏
- 在循环中使用JavaScript正则表达式会消耗不必要的内存吗?
- 无限循环中的NodeJS内存消耗
- 循环:10,000个数组(浪费时间)vs 1个全局数组(浪费内存)
- Nightwatchjs:使用while循环给出“进程内存不足”
- 为什么这个延迟的WHILE循环会导致大量内存泄漏?
- 非循环引用的闭包内存泄漏
- 具有异步功能的 for 循环会耗尽内存
- 如何在for(prop in obj)循环中分配内存,最好的方法是什么