私は WCF サービス (NetTCP のコンソール アプリケーション内でインスタンス化) を持っています。このサービスには、負荷時にインスタンス化される静的データ (大量) があります。
このコンソール アプリケーションの複数のインスタンスが同時に実行されており、それらのすべてが同じ静的データの初期化を行っています。単一のデータ ソースを使用してプロセス間でデータを共有し、各プロセスでデータを共有する必要がないようにする方法はありますか?大量のメモリを消費しますか?
私は WCF サービス (NetTCP のコンソール アプリケーション内でインスタンス化) を持っています。このサービスには、負荷時にインスタンス化される静的データ (大量) があります。
このコンソール アプリケーションの複数のインスタンスが同時に実行されており、それらのすべてが同じ静的データの初期化を行っています。単一のデータ ソースを使用してプロセス間でデータを共有し、各プロセスでデータを共有する必要がないようにする方法はありますか?大量のメモリを消費しますか?
メモリ マップ ファイルを使用できます。ただし、Windows がアプリケーションを保護する方法により、各プロセスには独自のメモリが必要です。
http://msdn.microsoft.com/en-us/library/dd997372.aspxから:
非永続ファイルは、ディスク上のファイルに関連付けられていないメモリ マップト ファイルです。最後のプロセスがファイルの処理を終了すると、データは失われ、ファイルはガベージ コレクションによって再利用されます。これらのファイルは、プロセス間通信 (IPC) 用の共有メモリの作成に適しています。
あらゆる種類の「共有」データでは、アクセスを同期するという追加のタスクがあります。
簡単な解決策は、最初に実行する別の専用サービスを作成することです。データを一度ロードすると、必要に応じて他のサービス インスタンスで使用できるようになります。
より堅牢なソリューションは、すべてのサービスが接続するデータベースまたはキャッシュ レイヤーにデータを格納することです。キャッシュ レイヤーは適切な選択です。サービスがキャッシュにない場合 (現在の設計をより多く保持) に遅延読み込みでき、(メモリ内で) 高速になる可能性があるためです。いくつかのキャッシュ オプションは次のとおりです。