gpt4 book ai didi

file - node.js 文件内存泄漏?

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:29 25 4
gpt4 key购买 nike

我发现以下代码存在内存泄漏:

while (true) {
console.log("Testing.");
}

我已经尝试定义字符串并只使用常量,但它仍然会泄漏内存:

var test = "Testing.";
while (true) {
console.log(test);
}

如果我使用文件而不是标准日志,也会发生同样的泄漏:

var test = "Testing.";
var fh = fs.createWriteStream("test.out", {flags: "a"});
while (true) {
fh.write(test);
}

我想可能是因为我没有正确关闭文件,但我试过了,仍然看到了泄漏:

var test = "Testing";
while (true) {
var fh = fs.createWriteStream("test.out", {flags: "a"});
fh.end(test);
fh.destroy();
fh = null;
}

有没有人对我应该如何在不泄漏内存的情况下编写东西有任何提示?

最佳答案

发生这种情况是因为您永远不会给 Node 处理“写入成功”事件的机会,因此它们会无休止地排队。为了让 Node 有机会处理它们,您必须让事件循环不时进行一次迭代。这不会泄漏:

function newLine() {
console.log("Testing.");
process.nextTick(newLine);
}
newLine();

在实际用例中,这不是问题,因为您几乎永远不必一次写出如此重要的数据。如果是这样,请不时循环事件循环。

然而,还有第二个问题也出现在 nextTick 技巧中:写入是异步的,如果控制台/文件/任何比 Node 慢的, Node 会无休止地缓冲数据直到输出再次免费。为避免这种情况,您必须在编写一些内容后监听 drain 事件 - 它会告诉您管道何时再次空闲。看这里:http://nodejs.org/docs/latest/api/streams.html#event_drain_

关于file - node.js 文件内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com