.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. アップロードしたファイルをアップロードする - サイズ制限は何ですか?
- 2. 紺碧の塊の容器のサイズを制限する方法は?
- 3. Team CityとMSBuild:別のコンピュータにファイルをコピーする理由は何ですか?
- 4. 塊のリストをループする
- 5. ファイルのサイズを決定する移植可能な方法は何ですか?
- 6. xibファイルをコピーする最も良い方法は何ですか?
- 7. データベースをコピーする最良の方法は何ですか?
- 8. File.Copyでファイルをコピーする
- 9. 大規模なXMLファイルを小さな塊に分割する
- 10. <table>のサイズを設定するベストプラクティスは何ですか?
- 11. hgコピーは何をしますか?
- 12. 整数のサイズを決めるのは何ですか?
- 13. jQueryでHTMLの塊から属性を削除する
- 14. イメージをコピーする前にサイズを変更しますか?
- 15. .hgignoreで根塊パターンを使用することは可能ですか?
- 16. アンドロイドはアセットフォルダからアプリデータにファイルをコピーしてコピーします
- 17. .sconsign.dbliteファイルは何ですか?
- 18. iPhone:ファイルからリソースにファイルをコピーする方法は?
- 19. ファイルをJavaで文字でコピーする
- 20. バイナリデータをJavaのURLから中間のコピーなしでファイルにコピーする
- 21. iPhoneの "em"ブレークポイントは何ですか? (pxサイズではない)
- 22. ファイルをコピーする方法リソースから?
- 23. ファイルをHDFSからローカルマシンにコピーする
- 24. データベースのコピーを作成しましたが、コピーのサイズが大きいです
- 25. ファイルをコピーするPythonスクリプト
- 26. CFileDialogファイルをコピーする
- 27. ファイルをsdcardにコピーする
- 28. Clearcase:ファイルをコピー/フォークする方法は?
- 29. php:ファイルをコピーまたはカットする
- 30. git repoのクローニングとコピーの違いは何ですか?
はXPで利用可能なCopyFileTransactedですか? – Simon
CopyFileTransactedは、Windows Vistaからはサポートされていません。しかし、CopyFileExはXP上でサポートされており、進捗情報も提供しています。私の更新された答えを見てください。 – inazaruk