我正在使用NAudio创建支持播放列表的音乐播放器。我按照以下方式检索每首曲目的持续时间:
return new AudioFileReader(FilePath).TotalTime;
但是在使用许多曲目时,这是一个真正的性能杀手。 15/20音频文件需要1秒钟。有没有办法优化它?我不认为我可以重复使用AudioFile阅读器对象,因为它没有为此提供任何方法,而且我也不知道还能用什么方法来获取音频文件的持续时间。
答案 0 :(得分:0)
它在很大程度上取决于文件类型。可能是为了获得最快的结果,假设您不需要支持Windows XP,请尝试使用MediaFoundationReader
。
答案 1 :(得分:0)
您可能已经解决了这个问题,但是对于每个感兴趣的人,我都说并行化是一个选择。通常,与CPU繁忙相比,I / O过程非常缓慢。这应该利用这一点。
将重复调用每个轨道的长度计算的代码更改为以下代码:
var playTime = new TimeSpan();
Parallel.ForEach( [yourFileList], file => {
[...]
var time = new AudioFileReader(file).TotalTime;
playTime.Add(time);
[...]
});
bar();
优势:
简单:不需要处于异步方法中,通常不需要太多更改
将自动产生内部函数的多个任务,但要等到一切完成后再执行bar()(阻塞线程)。
缺点:
适当的异常处理更加“困难”
不能取消