質問
私はいくつかのテキストファイル(300キロバイトの周りにそれぞれ)を読み取るしようとしています。今まで私は、ファイルを開いて、それを読むためにファイルストリームを使用してきました。 (タブ区切り)。しかし、私は、.NET 4.0のメモリマップドファイルについて聞きました。それは私がどの速く読みになるだろうか?
は、単純なファイルの読み込みを行い、パフォーマンスを比較任意のサンプルコードはありますか?
解決
あなたはまだディスクからそれらを読み取る必要があるとしてファイルは、その後、メモリマップドファイルを使用すると、すべての助けにはなりません、ディスクやメモリに読み込まれるだけの必要性にあります。
の場合あなたがやっているすべてのファイルを読み込んでいる場合は、メモリにはポイントがありません。
それらをマッピングしますメモリは、あなたが集中して作業を行っている際に使用するためのものであるのマップファイルファイル(読み取り、書き込み、変更)と、ディスクIOを避けたい。
他のヒント
あなたしているのちょうどの場合は、メモリマップファイルは意味がありません一度読んで。それはまだ、ディスクからデータをロードするために同じ時間がかかります。メモリマップファイルは、多くのランダム読み取りおよび/または操作を追求して、読み取りまたは書き込み操作を中断する必要はありませんので、書き込みがファイルに対して実行する必要がある場合に秀でています。
との自分ののデータのMMFの量は、いずれかの優位性を与えることはありません。 1気にテストを実行する場合は、一般的に、彼は見つけるでしょう、のMMFを使用した大規模な(巨大な)ファイルをコピーするより速く順次のReadFile / WriteFile関数を呼び出すよりであること。これは、MMF管理やファイルIOのWindowsで内部的に使用異なるメカニズムによって引き起こされます。
より高速なディスクIOを経由して似た何かを行うよりも、常にメモリ内のデータを処理します。あなたの処理がシーケンシャルであり、容易にメモリに収まる場合は、 File.ReadLinesを使用することができます( )データを1行ずつ取得し、ハードメモリのオーバーヘッドなしに高速に処理するを。ここでは例: C#で大きなテキストファイルを開く方法
あまりにもこの答えをチェックしてください:?メモリマップファイルを使用するときにする
メモリマップドファイルは、テキストファイルを読むことをお勧めしません。あなたはファイルストリームと右をしているテキストファイルを読むには。 MMPは、バイナリデータを読み取ることが最善である。