1

ほんの数秒でローカル共有に保存される約 7 MB のファイルがあります。ただし、そのファイルをネットワーク上の場所に保存するには数分かかります。これを高速化するにはどうすればよいか考えています。ここに私の現在のオプションがあります:

  1. データをローカル マシンの一時ファイルに保存し、その一時ファイルをネットワーク パスにコピーします。これが最も簡単で、費用対効果が最も高いため、おそらくこれを行います。
  2. とを使用SetFilePointerEx()SetEndOfFile()ます。この質問への回答に基づいて、これが役立つかもしれないと思いました: Windowsで大きなファイルを作成する
  3. バッファ書き込み。書き込みデータを自分でキャッシュし、バッファがいっぱいになったらフラッシュすることもできますが、これは OS によって既に行われているキャッシュと重複しませんか?

#1が最良の選択肢のように思えますが、ネットワークパスへの保存を高速化するためのより良い方法について何かアドバイスがあれば教えてください。

編集:ネットワークはギガビット LAN 上にあるため、速度は問題になりません。ファイルをネットワーク パスにコピーするには、約 1 秒かかります。データの小さなチャンクで WriteFile() を呼び出していることに気付いたので、より大きなチャンクを書き込むように高レベルのコードを最適化することはおそらく役立つでしょうが、速度の違いは依然として非常に大きいため、尋ねる価値のある質問です.

4

3 に答える 3

1

読み取り-変更-書き込み操作を避けたいと思うでしょう。通常、少なくとも 4KB のブロックを書き込みたいと思うでしょう。おそらく 2 のべき乗以上です。その理由は、通常、1 バイトを追加するには、ファイルの最後のブロックを読み取り、1 バイトを追加して、新しいブロックを書き戻す必要があるからです。 . 4KB ブロック (のみ) を書き込むことにより、通常、すべての書き込みはファイルの最後に新しいブロックとして終了します。

ここではキャッシングが役立つはずですが、キャッシングは完璧ではありません。ファイルを排他的に開くと役立つ場合があります。読み取りアクセスを拒否すると、キャッシュのフラッシュが他のアプリにとってあまり重要ではないことに OS が気付く場合があります。

CopyFile は、まったく同じことができるため高速です。

于 2009-05-22T09:21:08.717 に答える
1

ネットワークパスへの保存を高速化するためのより良い方法について誰かアドバイスがあるかどうか疑問に思っていますか?

より良いネットワークが必要なのかもしれません。多くの場合、ISP はダウンロードは高速ですが、アップロードは低速です。FTP などのプロトコルを使用して 7 MB を転送するには、どのくらいの時間がかかりますか?

于 2009-05-21T17:49:41.650 に答える
0

低速のネットワークで実行していますか?

Idはオプション番号1を使用し、ファイルをバックグラウンドでネットワーク共有に保存します

于 2009-05-21T17:47:52.043 に答える