1

私が考えていた...

I/O 操作で c# を使用したマルチスレッド (多くのファイルを c:\1\から にコピーするとしますc:\2\) では、操作をシーケンシャルに実行するのではなく、パフォーマンスに違いがありますか?

私が自分自身と格闘している理由は、IO操作が最終的に - 仕事をしなければならない1つのアイテムだからです。したがって、私が並行して作業している場合でも、彼はそれらのコピー注文を順次実行します...

または多分私の仮定は間違っていますか?

その場合、マルチスレッドのコピーを使用する利点はありますか:

  • 多数の小さなファイルをコピー (合計 4 GB)
  • 4 つの大きなファイルをコピーします (合計 4 GB、それぞれ 1000 MB)

ありがとう

4

3 に答える 3

3

ファイルのマルチスレッド化は、CPU ではなく IO に関するものです。これは、まったく異なるルールが適用されることを意味します。異なるデバイスには異なる特性があります:

  1. シーケンシャル IO のような磁気ディスク
  2. シーケンシャルまたはパラレル ランダム IO のような SSD (私の場合は 4 つのハードウェア「スレッド」があります)
  3. ネットワークは、遅延を償却するために多くの並列操作を好みます
于 2012-06-29T21:40:35.150 に答える
3

他の人が言うように、具体的なアプリケーション コンテキストに対して測定する必要があります。

しかし、これについて注意を喚起したいだけです。ファイルをコピーするたびに、コピー先の場所への書き込みアクセス許可がチェックされますが、これは低速です。

すでに圧縮された一連のファイルをコピー/貼り付けする必要があり、それらを 1 つの大きなZIPファイルに再度圧縮する場合、圧縮された合計サイズがすべてのコンテンツの合計、IO よりも大幅に小さくなることはありません。操作がより高速に実行されます。(試してみてください。以前にやったことがなければ、大きな違いがわかります)。

したがって、私は(これも具体なシステムで測定する必要がありますが、私の推測は単なる推測です)単一のディスクに1つの大きなファイルを書き込むと、多くの小さなファイルよりも高速になると思います。

お役に立てれば。

于 2012-06-29T21:30:45.290 に答える
2

私はハードディスク関連の質問の専門家ではありませんが、おそらくこれはあなたのためにいくつかの光を切り刻むでしょう:

Windows は NTFS ファイル システムを使用しています。このシステムは、たとえば 1kb 未満のファイルなど、あまり多くの小さなファイルを「好き」ではありません。「魔法のように」1kb の 100 個のファイルを 100kb ではなく 400kb にします。また、多くの「小さな」ファイルを処理する場合も非常に遅くなります。したがって、同じ重量の小さなファイルを多数コピーする代わりに、1 つの大きなファイルをコピーする方がはるかに高速です。

また、私の個人的な経験と知識から、マルチスレッドは多くのファイルのコピーを高速化することはありません。実際のハードウェア ディスクは 1 つのユニットのように動作し、同時に多くの要求を送信しても高速化できないためです (一つ一つ。)

于 2012-06-29T21:29:44.573 に答える