Taglib: wydajność i awarie

Używam biblioteki taglib (1.7.2) w mojej aplikacji Qt, aby odczytać niektóre metadaty plików mp3 z folderu muzycznego. Problem polega na tym, że uważam to za bardzo powolne.

Na przykład jest to kod:

QString path = "C:/Music/";
QDir d(path);
QStringList fileTypes;
fileTypes << "*.mp3" ;
d.setNameFilters(fileTypes);
QStringList pathList = d.entryList( QDir::NoDotAndDotDot | QDir::Files);

QTime t;
t.start();
foreach (QString fileName, pathList) {
    fileName = path + fileName;
    TagLib::FileRef *f = new TagLib::FileRef(fileName.toStdWString().c_str());
}
qDebug()<<t.elapsed();

Ten kod zajmuje około 11 sekund, aby załadować folder zawierający 400 utworów, czyli około 28 ms dla każdego pliku. Jest to linia bardzo wolna:

TagLib::FileRef *f = new TagLib::FileRef(pathFile.toStdWString().c_str());

Czy to normalne, że tak długo? Próbowałem używać wielowątkowości, ale nic nie zmienia, a nie pochodzi z mojego komputera, ponieważ jest wystarczająco potężny. Dziwne jest to, że gdy wszystkie pliki zostaną załadowane, następnym razem, gdy załaduje folder ponownie, odbywa się to natychmiastowo (aż do ponownego uruchomienia systemu operacyjnego).

Mam też inny problem.

Czasami, gdy tag nie jest ustawiony, aplikacja ulega awarii i wyświetla:

HEAP[myapp.exe]: 
Invalid address specified to RtlFreeHeap( 0ED90000, 0ED92CC0 )

W następującym wierszu na przykład:

if (!f->tag()->genre().isNull())

Używam Windows 7.

Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion