個々のオブジェクトのディスクから170個のファイル(たとえば、テキストファイル)をロードし、常にメモリに保持するアプリケーションがあります。これらのファイルをディスクからロードすると、メモリが1回割り当てられます。したがって、メモリの断片化はありません。また、FastMMを使用して、アプリケーションがメモリリークを起こさないようにします。
アプリケーションは、これらすべてのファイルを相互に比較して、類似点を見つけます。単純化しすぎると、テキスト文字列を比較すると言えますが、文字列間の違いを許容する必要があるため、アルゴリズムははるかに複雑です。各ファイルは約300KBです。メモリ(それを保持するオブジェクト)にロードすると、約0.4MBのRAMが必要になります。したがって、実行中のアプリは約60MBまたはRAM(ワーキングセット)を必要とします。データを約15分間処理します。問題は、4000万を超えるページフォールトを生成することです。
なんで?約2GBの空きRAMがあります。私が知っていることから、ページフォールトは遅いです。彼らは私のプログラムをどれだけ遅くしていますか?これらのページフォールトを減らすためにプログラムを最適化するにはどうすればよいですか?データの局所性と関係があると思います。誰かがこれ(Delphi)のいくつかのサンプルアルゴリズムを知っていますか?
更新:
しかし、ページフォールトの数を見ると(タスクマネージャーの他のアプリケーションは私の近くにありません)、メモリレイアウトを最適化する(ページフォールトを減らす)ことができれば、アプリケーションの速度を上げることができると思います)。
Delphi 7、Win 7 32ビット、RAM 4GB(3GB表示、2GB空き)。