EugeneRoshal
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору lelik007 Benchmark Цитата:| Я посмотрю, что можно ускорить. | Посмотрел - да, там есть место для оптимизации. В частности, для вывода размера упакованных папок WinRAR хранит их размеры в std::unordered_map. Но для экономии памяти в качестве ключа использовалось не само имя папки, а его SHA-256 хэш. На миллионах файлов вычисление этого хэша давало заметную задержку. Там возможны были различные компромиссные оптимизации, но пока я просто заменил хэш на имя папки. Для данного архива расход памяти из-за этого вырос незначительно, с 2244 MB до 2310 MB. Это была наиболее существенная, но не единственная причина снижения скорости. На 5 миллионах файлов любой вызов Win32 API, повторенный соответствующее количество раз, даже безобидные CharLower() или SetFilePointer(), дает дополнительную видимую задержку. Так что я посмотрю, что еще можно убрать. Это все уже в 7.20. Не в 7.1x, если такие еще потребуются. |