1

VC++ VisualStudio 2003 を使用しています。

複数の画像ファイル (1 ファイルあたり 30kb 程度) を別のコンピューターの共有フォルダーからローカル ファイルにコピーしようとしています。

問題は、1 回の転送で 2000 を超えるファイルが存在する可能性があり、それが完了するまでにかなりの時間がかかることです。

コピーを高速化できる別のコンピュータからファイルをコピーする別の方法はありますか?

前もって感謝します。

編集* クライアントの要求により、コード ベースを劇的に変更することはできません。技術的でない問題のためにベスト プラクティスから逸脱する必要はありませんが、より微妙なアプローチはありますか? 別の関数呼び出しなど?

誰かがそのようなことを知っている場合に備えて、私は魔法のブードゥー教を求めていることを知っています.

4

2 に答える 2

2

試してみるいくつかのこと:

  • OSを使用してファイルをコピーするのは速くなりますか?

  • いいえの場合は、ネットワークまたはその設定方法に固有の制限がある可能性があります (認証の問題、遠隔地のサーバーにハードウェアの問題がある、ビジー状態である、またはネットワーク カードが衝突や障害のためにパケットを失いすぎている可能性があります)。スイッチ、配線不良...)

  • さまざまなサイズのファイルを転送するいくつかのテストを行います。
    小さなファイルは、詳細をフェッチし、データを転送し、ディレクトリ エントリを作成するなどのオーバーヘッドが大きいため、常に転送が遅くなります。

  • 大きなファイルが高速である場合、ネットワークは問題なく、おそらくシステムを大幅に改善することはできません (ボトルネックは別の場所にあります)。

  • 最終的には、コードからファイルを開いて一度に大きなバッファーに読み込んでから、ローカル ドライブに保存することができます。OSが内部で行う多くのチェックをバイパスするため、これはより高速になる可能性があります。

  • これをいくつかのスレッドで実行して、ファイルを同時に開いたり、ロードしたり、書き込んだりして、処理を少し高速化することもできます。

マルチスレッドのファイル コピーを確認できるいくつかの参照:

これを自分でコードに実装するのが面倒な場合は、McTool などのユーティリティをアプリケーションのバックグラウンドで実行するだけで、作業を任せることができます。

于 2009-02-17T05:37:23.123 に答える
1

まず、2000 年は数ではありません。大量の小さなファイルを送信しているためにほとんどの時間がかかっている場合は、ソースでファイルを 1 つのファイルにパッケージ化し、宛先でパッケージ化を解除するソリューションを考え出します。これには、ソースでコードを実行する必要があります。現時点では、ネットワーク共有からコピーしているだけだと想定しているため、それを許可するようにソリューションを設計する必要があります。

それがネットワーク速度である場合 (ありそうもない)、それらも圧縮します。

私自身の考えでは、それはファイルの数であり、基本的にコピーのすべての繰り返し起動コストです。これは、2000 個の 30K ファイルが 60MB しかなく、10Mb リンクでは、理論上の最小時間は約 1 分であるためです。

あなたの時間がそれを大幅に上回っているなら、私は正しいと思います。

7zip などを使用してすべてを 1 つの7zファイルに圧縮し、送信してから、反対側で解凍するソリューションは、探しているもののように聞こえます。

しかし、推測しないで測定してください。テストして、パフォーマンスが向上するかどうかを確認します。次に、決定を下します。

于 2009-02-17T05:36:46.417 に答える