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

Ill*_*Ike 5 memory-leaks dart-isolates flutter

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

\n
  // run my _encodeJpeg in isolate\n  await compute(_encodeJpeg, null);\n\n\n  Future<void> _encodeJpeg(_JpegEncodeParams params) async {\n    // I\'ve made this function empty just to see if the memory leak is still reproducible - yes it is!\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,如果我不调用compute() - 我的应用程序中没有内存泄漏。所以肯定是compute()导致了这个问题。

\n

然后我创建了一个新的入门 Flutter 应用程序(默认带有按钮和计数器) - 并以相同的方式从该应用程序调用compute(),它工作正常!没有内存泄漏。很奇怪吧?!

\n

我的应用程序中的某些内容会导致compute() 上的内存泄漏,而应用程序本身(如果我不调用compute)没有任何内存泄漏。我使用一些以前版本的 Flutter 创建了我的应用程序,但现在我使用最新的 Flutter 编译它(见下文)。

\n

我的应用程序中是否有某些内容需要手动更新才能使compute()按预期工作?

\n

更新:我使用计算机( https://pub.dev/packages/computer )等库没有看到这个问题:

\n
final computer = Computer();\nawait computer.turnOn(workersCount: 1);\nawait computer.compute<void, _JpegEncodeParams>(_encodeTempJpeg, param: ...);\ncomputer.turnOff();\n
Run Code Online (Sandbox Code Playgroud)\n

颤医生:

\n
[\xe2\x88\x9a] Flutter (Channel stable, 1.22.5, on Microsoft Windows [Version 10.0.18363.1256], locale en-US)\n\xe2\x80\xa2 Flutter version 1.22.5 at C:\\sdk\\flutter\n\xe2\x80\xa2 Framework revision 7891006 (6 weeks ago), 2020-12-10 11:54:40 -0800\n\xe2\x80\xa2 Engine revision ae90085a84\n\xe2\x80\xa2 Dart version 2.10.4\n
Run Code Online (Sandbox Code Playgroud)\n

Fra*_*ažo 1

我在 flutter 2.2.3 上看到同样的问题

data我作为参数传递给计算的所有内容都保存在内存中 - await compute(exampleGlobalFunction, data)

我在Flutter DevTools/Memory选项卡中检查了它,并且数据实例从未被释放。如果我直接调用该函数(无需计算),那么数据将被正确释放。

编辑:我想我找到了解决方案 - 创建了一个 github 问题https://github.com/flutter/flutter/issues/86470