2017-01-13 10 views
0

SharpCompressライブラリを使用して.7zファイルを抽出していますが、60mb .7zファイルを抽出するのに約35分かかります。これは正常なのでしょうか、私はパフォーマンスに関して何か間違っていますか? .7zファイルは高圧縮モードとLZMAタイプで圧縮されています。7zファイルをディレクトリに展開する際のパフォーマンス上の問題C#

using (var archive2 = ArchiveFactory.Open(source)) 
{ 
    foreach (var entry in archive2.Entries) 
    { 
     if (!entry.IsDirectory) 
     { 
      entry.WriteToDirectory(destination, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite); 
      } 
     } 
     } 
    } 
+0

コンピューティングでの正常性についての質問は、その質問に答える価値があまりないため、多くのパラメータに基づいています。たぶんあなたはこれを言い換えることができます "私の意見では、これは時間がかかりすぎています。スピードアップが可能ですか?"私は答えが簡単だと思います – Default

+0

結果*ファイルの大きさはどれくらいですか? CPU負荷はどれくらいですか? *シングルスレッド*モードで7-zipのようなプログラムでファイルを解凍するのにどれくらい時間がかかりますか?あなたは単にコンピュータが遅いかもしれませんし、結果として得られるファイルが大きすぎるかもしれません。 –

+0

@PanagiotisKanavos結果ファイルは60.5 MBで、CPU負荷は%15付近です – Miral

答えて

0

これは古い投稿ですが、同じ問題がありました。

この行は問題

foreach (var entry in archive2.Entries) 

ある問題が

(、100個のファイルがある場合は、それが第一のファイルを100回解凍。つまり、第二のファイル99回など) hereに記載されています

解決策は、リーダー(前方のみ)を使用することです。 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 }); 
    } 
} 

これははるかに高速です。

関連する問題