Taglib: Desempenho e problemas de travamento
Eu estou usando a biblioteca taglib (1.7.2) no meu aplicativo Qt, para ler algumas metadatas de arquivos mp3 de uma pasta de música. O problema é que acho muito lento.
Por exemplo, este é o código:
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();
Este código leva cerca de 11s para carregar uma pasta contendo 400 músicas, ou seja, cerca de 28ms para cada arquivo. Esta é a linha muito lenta:
TagLib::FileRef *f = new TagLib::FileRef(pathFile.toStdWString().c_str());
É normal, é tão longo? Eu tentei usar multi-threading, mas isso não muda nada, e não vem do meu PC, já que é poderoso o suficiente. O estranho é que uma vez que todos os arquivos foram carregados, na próxima vez que carregar a pasta novamente, é feito instantaneamente (até eu reiniciar o sistema operacional).
Eu também tenho outro problema.
Às vezes, quando uma tag não é definida, o aplicativo trava e produz:
HEAP[myapp.exe]:
Invalid address specified to RtlFreeHeap( 0ED90000, 0ED92CC0 )
Na linha a seguir, por exemplo:
if (!f->tag()->genre().isNull())
Estou usando o Windows 7.
Obrigado.