mat*_*eoh 6 dart dart-isolates flutter
在我的 Windows Flutter 项目中,我使用该compute函数在 中运行一些代码Isolate,以避免冻结用户界面。
但我面临一个问题:我在其中运行的代码Isolate返回一个非常长的列表double(几百万个项目),因此,与我不这样做相比,整个执行花费了非常多的时间。Isolate根本不用。
这是进行多次计算并返回一个大列表的函数:
static Future<List<double>> extractWavSamples(File fileWav) async
{
// read the audio file:
Uint8List bytes = await fileWAV.readAsBytes();
bytes = bytes.sublist(44);
// convert to a list of doubles:
List<double> samples = [];
Uint8List samplesBytes = Uint8List(2);
int sample = 0;
for (int a = 0 ; a < bytes.length - 2 ; a += 2)
{
samplesBytes[0] = bytes.sublist(a + 1, a + 2)[0];
samplesBytes[1] = bytes.sublist(a, a + 1)[0];
sample = ByteData.view(samplesBytes.buffer).getInt16(0);
samples.add(sample / 32768.0);
}
return samples;
}
Run Code Online (Sandbox Code Playgroud)
以下是我如何运行该函数compute(运行需要 5-6 秒,但会冻结用户界面):
List<double> samples = await extractWavSamples(myFileWav);
Run Code Online (Sandbox Code Playgroud)
以下是我运行该函数的方法compute(运行大约需要 20 秒):
List<double> samples = await compute(extractWavSamples, myFileWav);
Run Code Online (Sandbox Code Playgroud)
我发现,因为该extractWavSamples()函数返回一个大列表,所以这就是代码运行时间过长的原因。如果我让它返回一个空列表,它会快得多。
事情是:我需要在主线程中使用该列表,这样我就可以显示它(它允许我显示音频文件的波形)。
那么我应该如何修复才能使代码在合理的时间内运行呢?
谢谢。
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |