I/Oは、基本的なAPI(読み取り/WriteFile)よりも速いセクションオブジェクト(CreateFileMapping)ですか?

StackOverflow https://stackoverflow.com/questions/4142125

質問

  1. createfilemappingとmapviewoffile、そしてmemcpyのような関数を使用してi/oを行います。
  2. read/writefileを使用するだけです。

最初のものは2番目より速いですか?わかりません。

なぜ速いのですか?
セクションオブジェクトを使用すると、VMMまたはキャッシュマネージャーからより多くのキャッシュメリットを取得できますか?

役に立ちましたか?

解決

ファイル自体がページングストレージとして使用されるため、ファイルメモリマッピングはページが発生すると高速になります。

メモリマップされたファイルのメモリが変更されていない場合、データはすでにファイルにあるため、ページをページファイルにフラッシュする必要はありません。 .exeおよび.dllファイルはこのメカニズムを使用してロードされるため、独自のページストレージです。

メモリマップされたファイルのメモリが書かれている場合、ページアウトはページングファイルが使用されていたかどうかと同じです。ディスク上の同じ場所が使用される可能性が高い場合があります(NTFSの最適化の対象となります)。

プレーンAPIは、メモリ中にファイルの内容を保持するためにページファイルのバックされたメモリを消費します。

わずかに異なる視点では、メモリマップファイルが実際に使用される可能性があるため、両方のAPIが最適化されています。

どちらのメカニズムもVMM/キャッシュマネージャーを採用します。

他のヒント

ReadFile/WriteFileの使用には、いくつかの追加のメモリブロックコピー操作が含まれるため、MMFSの使用よりも遅くなります。別の質問は、それがどれだけ遅くなるかということです - これはあなた自身を測定するために必要なものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top