ファイルをネットワーク共有の場所にアップロード(およびファイルに対して他の操作を実行)するために使用されるユーティリティがあります。
ファイルサイズは、数MBから500 MBに変化する傾向があります。
共有の場所にファイルをアップロードするときにマルチスレッドをサポートする必要があるという提案が出ました-バイトチャンクで行う必要はありません-各スレッドは1つのファイルを選択してアップロードを試行する必要があります。
マルチスレッドがこのようなIO操作を高速化できるかどうかは、私にはよくわかりません。私の勘は有効ですか?
確かにこの機能を構築する必要がある場合、ファイルコピーエンジンの設計にはどのようなアプローチが適しているのでしょうか。
robocopyなどのツールを使用することは理にかなっていますか(私はマルチスレッドをサポートする新しいバージョンを読みました)。
編集:遅延といくつかの重要な情報の欠落についての謝罪。
このユーティリティはC#(.Net 2.0)を使用して構築されており、今後のアップデートでも.Netを使用する必要があります(フレームワークのバージョンは制約ではありません)。ユーティリティはユーザーのマシンにインストールされます(WinXPの場合は約20)。ターゲット共有はWin2k3サーバー上にあります。
編集2:TPLを介したファイルのアップロードを実装する簡単なアプリケーションでいくつかのテストを実行することを決定しました。この分析を投稿して、先に進むかどうかを決定します。皆様のご協力に感謝いたします。
SHFileOperation(FO_COPY)
。これにより、Microsoftの人々が合理的であると見なしたすべての最適化が得られます。
select
として、スレッドの代わりにループを使用して非同期I / Oを使用する方法があります。これを行うには、「コードを裏返しにする」必要があります(ファイルをコピーするコードは、コマンドの簡単なシーケンスではなくなります)が、スレッドの同期について心配する必要はありません。