Проблемы с производительностью при извлечении файла 7z в каталог C#
Я использую библиотеку SharpCompress для извлечения файлов.7z, но для извлечения файла 60 Мб.7z требуется около 35 минут. Это нормально или я делаю что-то не так с точки зрения производительности? Файл.7z сжимается в режиме высокой степени сжатия и типе LZMA.
using (var archive2 = ArchiveFactory.Open(source))
{
foreach (var entry in archive2.Entries)
{
if (!entry.IsDirectory)
{
entry.WriteToDirectory(destination, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
}
}
}
}
1 ответ
Это старый пост, но у меня была такая же проблема.
Эта линия является проблемой
foreach (var entry in archive2.Entries)
Проблема описана здесь (т. Е. Если имеется 100 файлов, то первый файл распаковывается 100 раз, второй - 99 раз и т. Д.)
Решением является использование ридера (только вперед). Смотрите API.
Но пример кода там не поддерживает 7z.
Для 7z вы можете использовать archive.ExtractAllEntries()
например
using (var archive = ArchiveFactory.Open(movedZipFile))
{
var reader = archive.ExtractAllEntries();
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
reader.WriteEntryToDirectory(extractDir, new ExtractionOptions() { ExtractFullPath = false, Overwrite = true });
}
}
Это будет намного быстрее.