gpt4 book ai didi

flutter - 为什么这个内存泄漏?

转载 作者:行者123 更新时间:2023-12-03 14:52:05 29 4
gpt4 key购买 nike

在这个例子中,每次我按下“Click”,都会分配 50M 的 ram。它永远不会被回收,我可以推送 30 页并占用 1.5GB,尽管导航堆栈上只有 1 页。 GC 永远不会启动。这是怎么回事?Flutter (Channel master, 2.1.0-11.0.pre.122, on Microsoft Windows [Version 10.0.18363.1440], locale en-US)

void main() {
runApp(MaterialApp(
home: MemoryTest(),
));
}

class MemoryTest extends StatelessWidget {
final List<EdgeInsets> insets = List.generate(
1000000,
(index) => EdgeInsets.all(0),
);
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Column(
children: [
OutlinedButton(
child: Text("CLICK"),
onPressed: () {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (_) => MemoryTest(),
));
},
),
],
),
);
}
}

最佳答案

这里的答案是双重的。一方面,这是一个错误,flutter 团队正在处理它:https://github.com/flutter/flutter/issues/79605
此处错误的实际原因似乎实际上是关闭,包装上下文,这迫使无状态小部件永远留在内存中。
如果您通过将导航器缓存为本地变量来避免闭包中的上下文,则不会发生泄漏。显然大多数 Flutter 开发人员没有这样做,而且许多直接来自 Flutter 的代码示例也这样做,所以希望团队能够解决这个问题。

关于flutter - 为什么这个内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66913548/

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