おそらく、Managing Memory-Mapped Filesに行き、ここを見てください。.NET 2.0 では、その関数に対して PInvoke を使用する必要があります。.NET 4.0 以降、 MemoryMappedFile には効率的な組み込み機能があります。
こちらもご覧ください:
http://msdn.microsoft.com/en-us/library/dd997372.aspx
5 GB のデータをメモリ内に効率的に格納することはできません。32 ビット OS ではプロセスごとに 2 GB の制限があり、 64 ビット Windows on Windows では32 ビット プロセスごとに 4 GB の制限があります。
だからあなたは選択肢があります:
Google の Chrome 方式 (および FireFox 4) を使用して、プロセス間でデータのポーションを維持します。アプリケーションが 64 ビット OS で開始され、アプリケーションを 32 ビットのままにしておく何らかの理由がある場合に適用できる可能性があります。しかし、これはそれほど簡単な方法ではありません。64 ビット OS を使用していない場合、5GB 以上の RAM をどこで入手できるのでしょうか?
32 ビット OS を使用している場合、ソリューションはファイルベースになります。データをメモリに保持しようとすると(32ビットおよびプロセスあたり2 GBの制限の下でメモリにどのようにアドレス指定するのだろうかと思います)、OSはデータの一部(メモリページ)をディスクに継続的にスワップし、何度も復元します。アクセスします。あなたは大きなパフォーマンスの低下を被り、すでにそれに気づいています(私はあなたの問題の説明から推測しました)。主な問題 OS は、あるデータがいつ必要になり、別のデータがいつ必要になるかを予測できません。そのため、メモリページをディスク上で読み書きすることで最善を尽くそうとしています。
したがって、ディスク ストレージを非効率的な方法で間接的に使用している場合、MMF は効率的かつ制御された方法で同じソリューションを提供します。
MMF を使用するようにアプリケーションを再構築することができ、OS は効率的なキャッシュに役立ちます。自分で簡単なテストを行ってください MMF で十分かもしれません。
とにかく、ファイルベース以外の使用可能な RAM よりも大きなデータセットを操作する他のソリューションはありません。そして通常、特にそのような量のデータが来て処理する必要がある場合は、データ操作を直接制御することをお勧めします。