3

各テキストファイルを圧縮して、別のサーバーにコピーする必要があります。ファイルサイズは500MBから8GBまで非常に大きくなる可能性があります。各ファイルに依存関係はありません。Appxに35個のファイルがあります。

私の通常のコードはこれに約3〜4時間かかります。時間を短縮するために、私はこのためにスレッディングを実装することを考えています。糸脱毛は時間を短縮するのでしょうか、それともこれを行うための他の最良の方法はありますか?

4

4 に答える 4

1

.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ではなく、ネットワーク転送である場合は、あまり役に立たない可能性があります。

于 2012-10-01T19:24:13.500 に答える
1

Task.Factory.StartNewデフォルトでは、コアごとに 1 つのスレッドを作成し、他のスレッドをキューアップするため、使用することをお勧めします。

于 2012-10-01T19:28:17.613 に答える
1

大きなファイルを扱った私の経験では、ハードドライブの読み取り/書き込み自体やネットワークの制限により、マルチスレッドはプロセスをスピードアップしません。

ハード ドライブで大量の読み取りと書き込みを行っているだけでなく、大きなファイルをネットワーク経由で別のコンピューターにコピーしています。

平均ファイル サイズが 4.25 GB の場合、処理するストレージ スペースは 148.75 GB になります (ファイル数 35 の場合)。それは多くのスペースであり、そのすべてのスペースをメモリに読み込んでいるだけでなく(一度にすべてではないことを願っています。そうしないと、仮想メモリが起動し始め、ハードドライブにさらに書き出されます)、いくつかの書き込みも行っています.そのスペースを zip ファイルとして戻します。

ネットワークを介したファイル転送にその要素を追加します。あなたのネットワークが私が対処しなければならないネットワークの典型である場合、あなたが得ている時間にはまったく驚かない. メガビットおよびギガビットの速度は、彼らが主張するものではありません。

于 2012-10-01T20:01:52.500 に答える
0

ジッピングに外部ユーティリティ(つまり7-zip)を使用していて、プロセスのスピンアップがアプリケーションの問題ではない場合は、シンプルに保ち、必要な数の7-zip EXEをProcess.Start()するだけです。 (準)並列でタスクを実行するか、5のように一度にいくつかのタスクを実行します。あなた次第です。

于 2012-10-01T18:52:03.797 に答える