【发布时间】:2021-09-09 08:41:33
【问题描述】:
我尝试将节点流包装在异步函数中。但我想知道以下代码是否泄漏内存。承诺解决(拒绝)后,readStream 和 result 会被垃圾回收吗?如果没有,我应该如何避免内存泄漏?
async function readFile(path, keyword) {
const readStream = fs.createReadStream(path, {encoding: 'utf8'});
let result = await getCachedResult(); // getCachedResult is another async function
return new Promise((resolve, reject) => {
readStream.on('data', (chunk) => {
if (chunk.includes(keyword)) {
result += chunk;
}
})
readStream.on('error', (err) => {
reject(err)
readStream.close()
})
readStream.on('end', () => {
resolve(result)
readStream.close()
})
})
}
【问题讨论】:
-
仅供参考,此代码
if (chunk.includes(keyword))存在问题,因为块边界可以位于数据中的任何位置,包括关键字中间的任何位置。 -
@jfriend00 谢谢。代码 sn-p 是我的代码的简化版本。实际上,我使用 Readline 模块一次读取一行。
-
请不要以这种基本方式简化。请在以后的所有问题上发布您的真实代码。由于某些未知的原因,人们认为他们应该在此处发布伪代码或简化/简化代码,这通常会阻止我们理解真正的问题或提出最佳解决方案。您在询问垃圾收集,然后没有显示您的真实代码。没有人能真正回答你的真实代码,因为你没有展示它,事实上,你还涉及其他可能影响垃圾收集的模块。
标签: javascript node.js promise memory-leaks node-streams