Почему создание TagLib :: FileRef занимает время только в первый раз?

Как часть музыкального проигрывателя, который я разрабатываю на C ++ / Qt, я сканирую все аудиофайлы с помощью taglib, чтобы получить метаданные для базы данных.

Я заметил кое-что интересное.
В первый раз после перезагрузки в моей системе для создания объекта TagLib :: FileRef требуется около 100 мс и 500 мс. Когда я снова использую тот же файл для создания TagLib :: FileRef, это займет 0 мс, даже после перезапуска музыкального проигрывателя.

Вот функция, которую я использую, чтобы проверить это:

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 не запоминал и всегда фактически читал файл.

Я хочу оптимизировать функцию сканирования библиотеки и не всегда хочу перезапускать всю систему, чтобы проверить, как изменения в коде влияют на сканирование при первом запуске.

0

Решение

Как предположил Фрэнк Остерфельд, данные файла все еще находились в кеше диска.

Очистка дискового кэша с

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

заставляет taglib перечитать файл с диска снова.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]