【发布时间】:2021-01-22 11:29:21
【问题描述】:
我每次在 Flutter 应用程序中调用 compute() 时都会看到内存泄漏,据我所知,这基本上只是一种产生隔离的便捷方式。我的应用程序内存占用量在 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 入门应用程序(默认带有按钮和计数器) - 并以相同的方式从该应用程序调用 compute(),它工作正常!没有内存泄漏。很奇怪吧?!
我的应用程序中存在导致compute() 内存泄漏的问题,而应用程序本身(如果我不调用compute)没有任何内存泄漏。我使用一些以前版本的 Flutter 创建了我的应用程序,但现在我使用最新的 Flutter 编译它(见下文)。
我的应用中是否有某些内容需要手动更新以使 compute() 按预期工作?
更新:我在使用 Computer (https://pub.dev/packages/computer) 等库时没有看到此问题:
final computer = Computer();
await computer.turnOn(workersCount: 1);
await computer.compute<void, _JpegEncodeParams>(_encodeTempJpeg, param: ...);
computer.turnOff();
扑扑医生:
[√] 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 memory-leaks dart-isolates