I/Oは、基本的なAPI(読み取り/WriteFile)よりも速いセクションオブジェクト(CreateFileMapping)ですか?
-
30-09-2019 - |
質問
- createfilemappingとmapviewoffile、そしてmemcpyのような関数を使用してi/oを行います。
- read/writefileを使用するだけです。
最初のものは2番目より速いですか?わかりません。
なぜ速いのですか?
セクションオブジェクトを使用すると、VMMまたはキャッシュマネージャーからより多くのキャッシュメリットを取得できますか?
解決
ファイル自体がページングストレージとして使用されるため、ファイルメモリマッピングはページが発生すると高速になります。
メモリマップされたファイルのメモリが変更されていない場合、データはすでにファイルにあるため、ページをページファイルにフラッシュする必要はありません。 .exeおよび.dllファイルはこのメカニズムを使用してロードされるため、独自のページストレージです。
メモリマップされたファイルのメモリが書かれている場合、ページアウトはページングファイルが使用されていたかどうかと同じです。ディスク上の同じ場所が使用される可能性が高い場合があります(NTFSの最適化の対象となります)。
プレーンAPIは、メモリ中にファイルの内容を保持するためにページファイルのバックされたメモリを消費します。
わずかに異なる視点では、メモリマップファイルが実際に使用される可能性があるため、両方のAPIが最適化されています。
どちらのメカニズムもVMM/キャッシュマネージャーを採用します。
他のヒント
ReadFile/WriteFileの使用には、いくつかの追加のメモリブロックコピー操作が含まれるため、MMFSの使用よりも遅くなります。別の質問は、それがどれだけ遅くなるかということです - これはあなた自身を測定するために必要なものです。
所属していません StackOverflow