簡體   English   中英

帶異步功能的for循環耗盡內存

[英]for-loop with async function runs out memory

在開始大喊“不要對異步函數使用for循環!”之前, 讓我聲明我確實知道如何使用異步函數對循環進行編程,該異步函數從回調內部調用下一次迭代。

但是,如果我對回調不感興趣,或者僅在前任完成后才對處理一次迭代不感興趣。 就我而言,我是從xml文件中導入大量記錄並將其寫入mongoDB中的。 正常調用我的“寫入”功能將如下所示:

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());查看內存泄漏的方式console.log(process.memoryUsage()); 在循環內部。 您需要使用塊來處理此任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM