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からは取得されません。奇妙なことに、すべてのファイルが読み込まれると、次にフォルダを再度読み込むときに、(OSを再起動するまで)瞬時に実行されます。
私も別の問題があります。
タグが設定されていない場合、アプリがクラッシュして次のように出力されることがあります。
HEAP[myapp.exe]:
Invalid address specified to RtlFreeHeap( 0ED90000, 0ED92CC0 )
たとえば、次の行にあります。
if (!f->tag()->genre().isNull())
私はWindows7を使用しています。
ありがとう。