Билд 1333:
* ускорение распаковки RAR v2 на 30%
* поддержка solid RAR v2 архивов
* zxtune-qt: пофикшено падение при отмене поиска файлов
* zxtune-qt: пофикшена работа с локализованными путями (http://code.google.com/p/zxtune/issues/detail?id=25)
Скачать билд для win32
Скачать билд для слабых машин с win32
Скачать билд для win64
Небольшое исследование по поводу распаковки RAR.
Когда собирался поддержать этот формат, скачал много разных исходников, надеясь найти готовую либу (по типу zlib). Все что находилось было неподходящим по интерфейсу (unrarlib, libclamav_unrarlib). Разбирательство с оригинальным депакером было отложено ввиду его (депакера) большого размера. Тут товарищ Alco подкинул мне сорцы утилиты sunrar, написанной одним товарищем по мотивам оригинального депакера. Несмотря на брутальный код на голом С (оригинальный депакер написан на С++), небольшой объем исходника позволил разобраться в алгоритме и перенести его себе, адаптировав под требуемый интерфейс. Параллельно велась работа по уничтожению *****кода и прочих хардкорных идиотизмов "для скорости". Профилирование выявило в моем коде одно слабое место, которое, будучи замененным, дало прирост в скорости распаковки.
Вот некоторые результаты:
Примечания:Код:unrar: 22Mb: 4 801 204 b/s 100% 40Mb: 5 560 894 b/s 100% unrar64: 22Mb: 71 198 729 b/s 1483% (100%) 40Mb: 72 950 758 b/s 1311% (100%) sunrar: 22Mb: 5 812 448 b/s 121% 40Mb: 6 487 380 b/s 117% sunrar64: 22Mb: 5 955 331 b/s 124% (8%) 40Mb: 6 808 164 b/s 122% (9%) zxtune: 22Mb: 6 710 018 b/s 140% 40Mb: 7 490 588 b/s 134% zxtune_mingw: 22Mb: 7 362 944 b/s 153% 40Mb: 8 410 172 b/s 151% zxtune64: 22Mb: 72 360 279 b/s 1507% (102%) 40Mb: 56 093 512 b/s 1008% (77%)
- измерения проводились на Windows 7 Professional 64bit. Intel Core2 Quad@2.5GHz
- скорость представляет собой усредненное значение по результатам трех запусков
- алгоритм измерения скорости не учитывает время аллокации памяти и одинаков для всех приложений
- sunrar и zxtune распаковывают из памяти в память, в то время как unrar, скорее всего, читает по частям с диска (не уточнял) и приведен здесь для сравнения
- все подопытные были собраны одинаковыми компиляторами (кроме zxtune_mingw) с одинаковыми опциями, настроенными на производительность.
Выводы:
- *****код (sunrar) медленый и абсолютно не масштабируемый, хотя там куча приседаний на тему скорости
- mingw ощутимо быстрее msvc
- оптимизированная под небольшой словарь распаковка (sunrar, zxtune) выигрывает на небольших, но проигрывает на больших файлах
- 64-битные приложения работают гораздо быстрее (даже с учетом замедления работы 32-битных приложений в 64-битном окружении)




Ответить с цитированием