2

私は WCF サービス (NetTCP のコンソール アプリケーション内でインスタンス化) を持っています。このサービスには、負荷時にインスタンス化される静的データ (大量) があります。

このコンソール アプリケーションの複数のインスタンスが同時に実行されており、それらのすべてが同じ静的データの初期化を行っています。単一のデータ ソースを使用してプロセス間でデータを共有し、各プロセスでデータを共有する必要がないようにする方法はありますか?大量のメモリを消費しますか?

4

2 に答える 2

2

メモリ マップ ファイルを使用できます。ただし、Windows がアプリケーションを保護する方法により、各プロセスには独自のメモリが必要です。

http://msdn.microsoft.com/en-us/library/dd997372.aspxから:

非永続ファイルは、ディスク上のファイルに関連付けられていないメモリ マップト ファイルです。最後のプロセスがファイルの処理を終了すると、データは失われ、ファイルはガベージ コレクションによって再利用されます。これらのファイルは、プロセス間通信 (IPC) 用の共有メモリの作成に適しています。

あらゆる種類の「共有」データでは、アクセスを同期するという追加のタスクがあります。

于 2012-09-21T15:38:34.353 に答える
1

簡単な解決策は、最初に実行する別の専用サービスを作成することです。データを一度ロードすると、必要に応じて他のサービス インスタンスで使用できるようになります。

より堅牢なソリューションは、すべてのサービスが接続するデータベースまたはキャッシュ レイヤーにデータを格納することです。キャッシュ レイヤーは適切な選択です。サービスがキャッシュにない場合 (現在の設計をより多く保持) に遅延読み込みでき、(メモリ内で) 高速になる可能性があるためです。いくつかのキャッシュ オプションは次のとおりです。

于 2012-09-21T18:10:35.893 に答える