Проблемы с производительностью при извлечении файла 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 });
    }
}

Это будет намного быстрее.

Другие вопросы по тегам