.NETアプリケーションは大きなファイルをコピーするので、ユーザーからのフィードバックを得る必要があります。したがって、File.Copy
を使用するのではなく、1つのファイルのチャンクを読み込んでそれを別のチャンクに書き込み、各チャンクの後に進捗を表示します。普通ではない。しかし、進行状況を表示する時間が無視できると仮定すると、最も高速なファイルコピーを与えるために、使用するチャンクのサイズはどれくらいですか?ファイルをコピーするサイズの塊は何ですか?
3
A
答えて
2
あなたはwin32関数CopyFileTransacted(Vistaのみ)またはCopyFileEx(Windows 2000以上)の使用を検討する必要があります。これらはWindowsによって提供され、速度に合わせて最適化されています。
カスタムC#実装のパフォーマンスをテストし、ネイティブのFile.Copyパフォーマンスと比較することをお勧めします。パフォーマンスがカスタムC#実装に匹敵する場合(つまり、同じオーダー)それ以外の場合は、CopyFileTransacted関数またはCopyFileEx関数を使用する方がよいでしょう。
p.s. hereから:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
internal static extern bool CopyFileTransacted([In] string lpExistingFileName, [In] string lpNewFileName, [In] IntPtr lpProgressRoutine, [In] IntPtr lpData, [In, MarshalAs(UnmanagedType.Bool)] ref bool pbCancel, [In] CopyFileFlags dwCopyFlags, [In] KtmTransactionHandle hTransaction);
2
非常に大きなバッファを使用すると、最高の転送速度が得られますが、粗いフィードバックが得られます。それはトレードオフであり、ハードウェアにも大きく依存します。
私はこのようなことをしばらくしてから64kバッファーに落ち着けましたが、少し実験したいかもしれません。あなたが選ぶ
そして何でも、フィードバック「偽造」あなたは簡単にユーザーを与えるために進捗状況を推定することができ、より大きなチャンクを使用した場合でも、それは512(1セクタ)の倍数
0
関連する問題
- 1. Knitrは同じ塊で図形のサイズが異なります
- 2. アップロードしたファイルをアップロードする - サイズ制限は何ですか?
- 3. ピップとコピー貼り付けでファイルをインストールするのとは何ですか
- 4. 紺碧の塊の容器のサイズを制限する方法は?
- 5. Team CityとMSBuild:別のコンピュータにファイルをコピーする理由は何ですか?
- 6. ファイルのサイズを決定する移植可能な方法は何ですか?
- 7. 塊のリストをループする
- 8. xibファイルをコピーする最も良い方法は何ですか?
- 9. ffmpegコマンドラインで「コピー」とは何ですか?
- 10. Bashのファイル名から数字の塊だけを抽出する方法は?
- 11. 不変のオブジェクトをコピーする点は何ですか? ObjCで
- 12. elasticserachオブジェクトのopimalサイズは何ですか?
- 13. モンゴイデスの塊とは異なる。それは速いですか?
- 14. スキーマのコピーを作成する目的は何ですか
- 15. データベースをコピーする最良の方法は何ですか?
- 16. 一時ファイルにダウンロードしてコピーする理由は何ですか?
- 17. サイズが変わる画像にテキストの塊を整列させる方法は?
- 18. numpyでintのサイズを決めるのは何ですか?
- 19. `` `をknitr塊に表示するには?
- 20. <table>のサイズを設定するベストプラクティスは何ですか?
- 21. ファイルの塊を別のフォルダに保存することができます
- 22. hgコピーは何をしますか?
- 23. Magitチェックアウトの塊/コミットHEADに塊
- 24. 整数のサイズを決めるのは何ですか?
- 25. File.Copyでファイルをコピーする
- 26. Pythonでファイルをコピーする
- 27. 大規模なXMLファイルを小さな塊に分割する
- 28. ビデオファイルのサイズに影響する要因は何ですか?
- 29. jQueryでHTMLの塊から属性を削除する
- 30. VBA。コピー - 複数のファイルをZIPファイルにコピーしますか?
はXPで利用可能なCopyFileTransactedですか? – Simon
CopyFileTransactedは、Windows Vistaからはサポートされていません。しかし、CopyFileExはXP上でサポートされており、進捗情報も提供しています。私の更新された答えを見てください。 – inazaruk