我在我的 Qt 应用程序中使用 taglib 库(1.7.2),从音乐文件夹中读取 mp3 文件的一些元数据。问题是我发现它很慢。
例如,这是代码:
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();
这段代码加载一个包含 400 首歌曲的文件夹大约需要 11 秒,即每个文件大约需要 28 毫秒。这是一条非常慢的线:
TagLib::FileRef *f = new TagLib::FileRef(pathFile.toStdWString().c_str());
这么长正常吗?我尝试过使用多线程,但它并没有改变任何东西,而且它不是来自我的 PC,因为它足够强大。奇怪的是,一旦加载了所有文件,下次再次加载文件夹时,它就会立即完成(直到我重新启动操作系统)。
我还有另一个问题。
有时,当未设置标签时,应用程序崩溃并输出:
HEAP[myapp.exe]:
Invalid address specified to RtlFreeHeap( 0ED90000, 0ED92CC0 )
例如以下行:
if (!f->tag()->genre().isNull())
我正在使用 Windows 7。
谢谢。