3
약속 (promiseUserData (uid))을 통해 관련 데이터를 가져 오기 위해 500 000 이상의 uid를 실행합니다. 어떤 이유로 인해 메모리 사용이 루프에서 루프로 지워지지 않습니다.루핑 오버플로 Promise.all 메모리 누수가 대기
루프 당 약 4MB의 데이터가 사용되고 메모리에서 지워지지 않습니다.
나는 이것을 고치는 방법으로 무지합니다. 약속 풀링도이 문제를 야기합니다.
도움을 많이 주시면 감사하겠습니다.
당신이 한 번에 모든 반복에 대한 1000 약속을 만들for (var i = 0; i <= numPasses; i++) {
var subset = uids.splice(0, 1000);
var userDataArray = [];
var promises = [];
subset.map((uid) => {
promises.push(promiseUserData(uid).then((userData) => {
if (userData) {
userDataArray.push(userData);
}
}));
});
await Promise.all(promises).catch((err) => {
console.log('Error in Promises.all: ', err);
});
}
* 메모리에서 지워지지 않습니다 *.
이 방법을 사용하면 설치하고 블루 버드 수입이 필요합니다? 어떤 시간대에 대해 이야기하고 있습니까? 얼마나 많은 기억이 남았습니까? (일부 GC는 필요한 경우에만 세계를 멈추게합니다.) –
나는 이것을 memwatch-next와 process.memoryUsage(). heapUsed로 측정했습니다. 이 코드는 nodejs에서 실행 중이며 수동으로 GC를 호출했지만 도움이되지 않습니다. –
var 대신에 for 루프에서'let'을 사용하면 어떨까요? var은 함수 범위이고 let은 블록 범위입니다. 아마도'let'을 사용하여 약속 배열을 정리할 것입니다. 왜 할당을 다시 지정하면 메모리가 정리되지 않을지 확신 할 수 없습니다. – HMR