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表示在應用程序重新啓動後它仍然很快 –