3

私のアプリケーションでは、大きなファイル (約 2 ~ 7 GB) に約 50 ミリ秒ごとにデータ チャンク (約 2 MB) を継続的に書き込む必要があります。これはシーケンシャルで循環的な方法で行われるため、チャンクを次々とファイルに書き込み、ファイルの最後に到達したら最初からやり直します。

現在、私は次のようにやっています:

C# では、File.OpenWrite1 回呼び出して読み取りアクセスでファイルを開き、ファイルのサイズを で設定しますSetLength。チャンクを書き込む必要がある場合は、安全なファイル ハンドルを unmanaged WriteFile(kernel32.dll) に渡します。ここでは、チャンクを書き込む必要があるファイル内の位置を指定するオーバーラップ構造を渡します。書き込む必要があるチャンクはアンマネージ メモリに格納されるため、 にIntPtr渡すことができる がありWriteFileます。

このプロセスをより効率的にできるかどうか、またその方法を知りたいです。何か案は?

詳細な質問:

  • ファイル I/O からメモリ マップト ファイルへの変更は役に立ちますか?
  • NTFS の最適化を含めることはできますか?
  • 不足しているファイルを作成するときに役立つパラメーターはありますか? (特別なパラメーターを使用した管理されていない呼び出しの可能性があります)
4

1 に答える 1

2

より優れたハードウェアを使用することは、おそらく、ファイル書き込み効率を向上させるための最もコスト効率の良い方法です。あなたの質問のほとんどに答えてくれるマイクロソフトの研究からの論文があります: Sequential File Programming Patterns and Performance with .NET and the downloadable source code (C#) if you want to run the paper from your machine.

要するに:

  • デフォルトの動作は、単一のディスクで優れたパフォーマンスを提供します。
  • ディスク アレイがある場合は、バッファリングされていない IO をテストする必要があります。書き込み速度を 8 倍に向上させることができます。

social.msdnのこのスレッドも興味深いかもしれません。

于 2013-07-18T19:15:35.887 に答える