2009-05-10 7 views
0

私は、実行するたびに約200MBの市場データを必要とするアプリケーションを実行します。 これは最近のメモリに保存するデータ量が少ないため、スピードを上げるためにやりたいことです。ローカルIPC用のメモリベースのデータサーバ

セッションの途中で、私はおそらく1つ以上のアプリケーションを繰り返し実行し、再実行し、再実行し、再実行します。

だから、アプリがクラッシュしてもディスク上のデータファイルを開いてデータを再ロードする必要がないように、データを一日中メモリに保持する方法が問題です。

私の最初のアイデアは、データを共有メモリに読み込んで使用できるだけのデータサーバーアプリケーションを作成することです。私は

のCreateFileを呼び出すことによって、私はIPCのためにメモリマッピングを使用することができると思いますそれを行う場合は()

CreateFileMapping関数()

のMapViewOfFile()

は、より良いIPC /アプローチはありますか?

+2

メモリマッピングは私がこれをやってきた取引システムのやり方です。 –

答えて

1

メモリが不足していてメモリを要求しない場合は、起動時間が短くなる可能性があります。メモリへのアクセスを保証するには、hereのように、名前付き共有メモリにメモリマップされたファイルを置いておきたいと思うでしょう。シンプルなプログラムで共有を作成して管理すると、メモリに残っていることを保証できます。

1

データファイルをメモリにマップするだけです。コンピュータのメモリが不足している場合を除き、プログラムが終了してもファイルはファイルキャッシュに残ります。次に起動すると、アクセスは高速になります。

メモリ内のデータがオンディスクのデータと異なる場合は、2つのファイルを使用してください。再起動時に、メモリファイルに書き込まれたタイムスタンプとファイルリビジョンをチェックして、ディスクファイルと比較して、最新のデータを持つプログラムをプログラムが認識するようにします。

+0

私はあなたを正しく理解していれば、終了時に1つのアプリケーションがデータをメモリに残すことを提案していますか? ないアプリケーションが UnmapViewOfFile pDataを CloseHandleをhFileMapping CloseHandleをhSys –

+1

@マイク呼び出すので、これはどのように動作するか確認してください - 私はそのメモリマッピング機能は超えて永続化のためのいくつかのオプションを持っているかはわからないので、私は、Windowsの男ではありませんよあなたのプログラムの終わり。それが間違いなく持っているのは、mem-mappedファイルの何らかの参照カウントです。だから、1日の始まりにファイルをロードするだけの何もしない小さなプログラムを書いてください。実際のアプリケーションを実行するときには、OSはファイルマッピングを実行するときに、すでにメモリ内にあるものに接続するだけです。 – Duck

+0

@Mike - 私は、OSがマップされていないファイルのデータをRAMに保存しているのは、そのメモリが別のものに必要な場合を除きます。 –

関連する問題