Я хочу рассчитать MD5 хэш файла.QT - QFile - медленное чтение из файла
Если я использую fast_md5 с родным lib http://twmacinta.com/myjava/fast_md5.php, тогда Java читает файл с жесткого диска с 90 Мбайт/с ... 120 Мбайт/с и время вычисления 70 секунд.
Если я использую QT
QCryptographicHash hash(QCryptographicHash::Md5);
QFile in("C:/file.mkv");
QFileInfo fileInfo("C:/file.mkv");
qint64 imageSize = fileInfo.size();
const int bufferSize = 1000000;
char buf[bufferSize+5];
int bytesRead;
if (in.open(QIODevice::ReadOnly)) {
while ((bytesRead = in.read(buf, bufferSize)) > 0) {
// imageSize -= bytesRead;
// hash.addData(buf, bytesRead);
}
}
else {
qDebug() << "Failed to open device!";
}
in.close();
qDebug() << hash.result().toHex();
тогда моя программа чтения файла с жесткого диска со скоростью 20 ... 78 Мб/с и известково время составляет 210 секунд.
Можно ли ускорить обработку MD5 Calc в QT? Может понадобиться увеличить буфер от 1000000 до большего значения?
экспериментировали Вы с увеличением размера буфера? – RobbieE
Буфер настолько велик, что он должен быть выделен в куче, и он должен быть кратным a из 4096 байт - малым размером страницы. Нет смысла добавлять 5 дополнительных байтов в конце. Чтобы провести значимое сравнение, вам нужно прочитать первую половину файла, используя 'fread' и' fwrite', а вторую половину - 'QFile'. Независимо от того, какие различия вы увидите, это будет косвенным и не будет равносильно ничему, если вы правильно проведете тестирование. Вам действительно нужно опубликовать полный тест, который использует QElapsedTimer для самого времени. –