大容量 (数百 GB) の MapViewOfFile での 64 ビット パフォーマンスの問題に関して、ここで少し問題があります。
32 ビット以下で、私たちのアプリは 64 KB のサイズの何千ものビューをマッピングし、データベース上で自由にスワップし続けました。64 ビットでは、最終的にデータベース全体をプロセスの仮想アドレス空間にマップできます。ここまでは順調ですね。
Windows にすべてのスワッピングを処理させるため、64 ビット バージョンは 32 ビット バージョンよりもはるかに優れたパフォーマンスを発揮すると予想されます (必要な場合、つまり、これは主にサーバーに存在する物理メモリの量に依存します)。
ただし、実際には、64 ビット バージョン (すべてのファイルを一度にメモリにマップする) のパフォーマンスははるかに悪く、32 ビット バージョンがデータベースを処理するのにかかった時間の 2 倍から 40 倍かかります。
多くの要因を排除しましたが、実際には Windows の共通キャッシュ自体が原因のようです。(私たちは主に Windows Server 2008 を使用していますが、排他的ではありません。ただし、全体的に同じ問題です。)
大きなファイルを一度だけメモリにマッピングするときに期待される追加のスピードアップを得るためにできることはありますか? (小さなチャンクを手動で継続的にマッピングおよび交換するのとは対照的です。)
前もって感謝します!