0
作为我用C++/Qt开发的音乐播放器的一部分,我使用taglib扫描所有音频文件以获取数据库的元数据。为什么创建一个TagLib :: FileRef只需要第一次的时间?
我注意到一些有趣的事情。 重启后第一次,我的系统需要大约100ms和500ms来创建一个TagLib :: FileRef对象。当我再次使用相同的文件创建TagLib :: FileRef时,即使在重新启动音乐播放器后,也需要0ms。
这里是我使用的测试功能:
bool suffixCheck(const QString &val)
{
if (val.endsWith(".mp3")) {
return true;
}
if (val.endsWith(".m4a")) {
return true;
}
if (val.endsWith(".ogg")) {
return true;
}
return false;
}
void doTaglibThing(const QString &path)
{
if (suffixCheck(path)) {
QElapsedTimer timer;
timer.start();
TagLib::FileRef f(path.toUtf8().data(),
true,
TagLib::AudioProperties::Accurate);
Q_UNUSED(f);
qDebug() << "End taglibThing" << timer.elapsed();
}
}
这是为什么?我假设taglib以某种方式“记住”这些对象。我该如何做到这一点,以便taglib不记得并且总是实际上必须读取文件。
我想优化库扫描功能,并且我并不总是希望重新启动整个系统,以检查代码更改如何影响首次扫描。
我不认为这在Taglib中很神奇,它可能只是文件数据仍然在磁盘缓存中,因此只有RAM访问,但在第一次访问后不需要磁盘访问。 –
最有可能只是一个需要时间来初始化的静态变量 – jpo38
@ jpo38 r-mean表示在应用程序重新启动后它仍然很快 –