gpt4 book ai didi

Flutter:隔离内存泄漏(计算)

转载 作者:行者123 更新时间:2023-12-04 17:21:36 28 4
gpt4 key购买 nike

每次我在 Flutter 应用程序中调用计算()时,我都会看到内存泄漏,据我所知,这基本上只是一种生成隔离的便捷方法。我的应用程序内存占用增加并且在 GC 之后永远不会减少。
我已将我的代码简化为仅调用一个空函数 - 并且该问题仍然可以重现:

  // run my _encodeJpeg in isolate
await compute(_encodeJpeg, null);


Future<void> _encodeJpeg(_JpegEncodeParams params) async {
// I've made this function empty just to see if the memory leak is still reproducible - yes it is!
}
请注意,如果我不调用 compute() - 我的应用程序中没有内存泄漏。所以肯定是 compute() 导致了这个问题。
然后我创建了一个新的入门 Flutter 应用程序(默认一个带有按钮和计数器的应用程序) - 并以相同的方式从该应用程序调用计算(),它工作正常!没有内存泄漏。很奇怪吧?!
我的应用程序中有一些东西会导致计算()上的内存泄漏,而应用程序本身(如果我不调用计算)没有任何内存泄漏。我已经使用一些以前版本的 Flutter 创建了我的应用程序,但现在我使用最新的 Flutter 编译它(见下文)。
我的应用程序中是否有需要手动更新才能使计算()按预期工作的内容?
更新:使用诸如 Computer ( https://pub.dev/packages/computer ) 之类的库时,我没有看到此问题:
final computer = Computer();
await computer.turnOn(workersCount: 1);
await computer.compute<void, _JpegEncodeParams>(_encodeTempJpeg, param: ...);
computer.turnOff();
flutter 医生:
[√] Flutter (Channel stable, 1.22.5, on Microsoft Windows [Version 10.0.18363.1256], locale en-US)
• Flutter version 1.22.5 at C:\sdk\flutter
• Framework revision 7891006 (6 weeks ago), 2020-12-10 11:54:40 -0800
• Engine revision ae90085a84
• Dart version 2.10.4

最佳答案

我在 flutter 2.2.3 上看到了同样的问题
全部 data我作为参数传递给计算保存在内存中 - await compute(exampleGlobalFunction, data) .
我查了一下 Flutter DevTools/Memory tab 和数据实例永远不会被释放。如果我直接调用该函数(没有计算),那么数据将被正确释放。
编辑:我想我找到了解决方案 - 创建了一个 github 问题 https://github.com/flutter/flutter/issues/86470

关于Flutter:隔离内存泄漏(计算),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65844298/

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