Чтобы обновить индикатор выполнения с количеством файлов для извлечения. Моя программа просматривает список Zip-файлов и собирает количество файлов в них. Общее количество составляет примерно 22000 файлов.
Код, который я использую:
foreach (string filepath in zipFiles)
{
ZipArchive zip = ZipFile.OpenRead(filepath);
archives.Add(zip);
filesCounter += zip.Entries.Count;
}
Однако похоже, что zip.Entries.Count
выполняет какой-то обход, и для завершения этого подсчета требуется время (несколько минут и многое, многое другое, если подключение к Интернету не очень хорошее).
Чтобы иметь представление о том, насколько это можно улучшить, я сравнил приведенное выше с производительностью 7-Zip. Я взял один из zip-файлов, содержащих ~ 11000 файлов и папок:
- 2 секунды на открытие архива 7-Zip.
- 1 секунда, чтобы получить свойства файла.
- В свойствах я вижу 10016 файлов + 882 папки - это означает, что 7-Zip ~ 3 секунды определяет, что в Zip-файле 10898 записей.
Любая идея, предложение или любой альтернативный метод, который быстро подсчитывает количество файлов, будут оценены.
- Использование DotNetZip для подсчета на самом деле намного быстрее, но из-за некоторых внутренних бюрократических проблем я не могу его использовать. Мне нужно решение, не использующее сторонние библиотеки, я все еще могу использовать стандартные библиотеки Microsoft.