各テキストファイルを圧縮して、別のサーバーにコピーする必要があります。ファイルサイズは500MBから8GBまで非常に大きくなる可能性があります。各ファイルに依存関係はありません。Appxに35個のファイルがあります。
私の通常のコードはこれに約3〜4時間かかります。時間を短縮するために、私はこのためにスレッディングを実装することを考えています。糸脱毛は時間を短縮するのでしょうか、それともこれを行うための他の最良の方法はありますか?
各テキストファイルを圧縮して、別のサーバーにコピーする必要があります。ファイルサイズは500MBから8GBまで非常に大きくなる可能性があります。各ファイルに依存関係はありません。Appxに35個のファイルがあります。
私の通常のコードはこれに約3〜4時間かかります。時間を短縮するために、私はこのためにスレッディングを実装することを考えています。糸脱毛は時間を短縮するのでしょうか、それともこれを行うための他の最良の方法はありますか?
.Net 4.0には、新しいThreading.Task名前空間があります。これにより、スレッドのスケジュールを深く理解しなくても、タスクのスケジュールを簡単に設定できます。
これにより、(成功または失敗に関係なく)前のタスクが完了すると、後続のタスクをキューに入れて実行できます。
http://msdn.microsoft.com/en-us/library/system.threading.tasks.aspx
http://www.codethinked.com/net-40-and-systemthreadingtasks
ただし、以前のコメント提供者が示唆しているように、ボトルネックがファイル圧縮を行うCPUではなく、ネットワーク転送である場合は、あまり役に立たない可能性があります。
Task.Factory.StartNew
デフォルトでは、コアごとに 1 つのスレッドを作成し、他のスレッドをキューアップするため、使用することをお勧めします。
大きなファイルを扱った私の経験では、ハードドライブの読み取り/書き込み自体やネットワークの制限により、マルチスレッドはプロセスをスピードアップしません。
ハード ドライブで大量の読み取りと書き込みを行っているだけでなく、大きなファイルをネットワーク経由で別のコンピューターにコピーしています。
平均ファイル サイズが 4.25 GB の場合、処理するストレージ スペースは 148.75 GB になります (ファイル数 35 の場合)。それは多くのスペースであり、そのすべてのスペースをメモリに読み込んでいるだけでなく(一度にすべてではないことを願っています。そうしないと、仮想メモリが起動し始め、ハードドライブにさらに書き出されます)、いくつかの書き込みも行っています.そのスペースを zip ファイルとして戻します。
ネットワークを介したファイル転送にその要素を追加します。あなたのネットワークが私が対処しなければならないネットワークの典型である場合、あなたが得ている時間にはまったく驚かない. メガビットおよびギガビットの速度は、彼らが主張するものではありません。
ジッピングに外部ユーティリティ(つまり7-zip)を使用していて、プロセスのスピンアップがアプリケーションの問題ではない場合は、シンプルに保ち、必要な数の7-zip EXEをProcess.Start()するだけです。 (準)並列でタスクを実行するか、5のように一度にいくつかのタスクを実行します。あなた次第です。