【发布时间】:2012-07-01 17:25:21
【问题描述】:
我在我的 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。
谢谢。
【问题讨论】:
标签: c++ performance qt taglib