いくつかのテキスト ファイル (それぞれ約 300 kb) を読み込もうとしています。今までは Filestream を使用してファイルを開いて読み取っていました。(タブ区切り)。しかし、.net 4.0 のメモリ マップ ファイルについて聞いたことがあります。それは私の読み取りを速くしますか?
単純なファイルの読み取りとパフォーマンスの比較を行うサンプル コードはありますか?
いくつかのテキスト ファイル (それぞれ約 300 kb) を読み込もうとしています。今までは Filestream を使用してファイルを開いて読み取っていました。(タブ区切り)。しかし、.net 4.0 のメモリ マップ ファイルについて聞いたことがあります。それは私の読み取りを速くしますか?
単純なファイルの読み取りとパフォーマンスの比較を行うサンプル コードはありますか?
ファイルがディスク上にあり、メモリに読み込む必要がある場合は、ディスクから読み込む必要があるため、メモリ マップド ファイルを使用してもまったく役に立ちません。
ファイルを読み取るだけの場合は、ファイルをメモリにマッピングしても意味がありません。
メモリ マップト ファイルは、ファイルを集中的に処理 (読み取り、書き込み、変更) し、ディスク IO を回避したい場合に使用します。
1 回だけ読み取りを行う場合、メモリ マップト ファイルは意味がありません。ディスクからデータをロードするのに同じ時間がかかります。メモリ マップト ファイルは、シーク操作で読み取りまたは書き込み操作を中断する必要がないため、ファイルに対して多数のランダムな読み取りおよび/または書き込みを実行する必要がある場合に優れています。
あなたのデータ量では、 MMFは何の利点もありません。ただし、一般に、わざわざテストを実行すると、MMFを使用して大きな(巨大な)ファイルをコピーする方が、ReadFile/WriteFileを順番に呼び出すよりも高速であることがわかります。これは、MMF管理とファイルIOのためにWindowsで内部的に使用されるさまざまなメカニズムが原因で発生します。
メモリ内のデータを処理することは、ディスクIOを介して同様のことを行うよりも常に高速です。処理がシーケンシャルでメモリに簡単に収まる場合は、File.ReadLines()を使用してデータを行ごとに取得し、ハードメモリのオーバーヘッドなしで高速に処理できます。ここに例:C#で大きなテキストファイルを開く方法
この回答も確認してください:メモリマップトファイルをいつ使用するか?
メモリ マップト ファイルは、テキスト ファイルの読み取りにはお勧めしません。テキスト ファイルを読み取るには、Filestream を使用します。MMP は、バイナリ データを読み取るのに最適です。