2011-02-04 12 views
0

私のデータベースからデータを取得するために使用されるWCFサービスがあります。データベースのサイズは約2 GBと非常に大きいです。だから私はこのデータをキャッシュする。サービスホストは、このデータは、私が最初に使用WCFでキャッシング機能を実現するための提案

InstanceContextModeをキャッシュする必要があるとき、私はしたい= InstanceContextMode.Single

このサービスBehviorsはコンストラクタがときにのみ呼び出されますように私は単純に、サービスコンストラクタのコードをキャッシュ書くことができることを私にできますservicehost.open();メソッド呼び出し。クライアントがプロキシコンストラクタを使用してこのサービスを呼び出すと、呼び出されません。これは非常にうまく動作します。後で、このサービスの単一インスタンスだけがすべての要求を処理するため、1000ユーザーがこのサービスを一度に呼び出すと、このInstanceContextModeにパフォーマンスの問題があることがわかりました。私は ConcurrencyMode = ConcurrencyMode.Multiple

InstanceContextMode = InstanceContextMode.PerCall に自分の設定を変更して最大のパフォーマンスを得るために今私は、サービスホストデータがキャッシュされることになるときである同じキャッシュ機能を取得したいです。この問題を解決するために私を助けてください。

CustomBehaviorsを介して私に教えてください。私はこれを達成できますか?

よろしく、ConcurrencyMode.MultipleInstanceContextMode.PerCallの Rizwan

答えて

0

組み合わせは意味がありません。 PerCallインスタンシエーションは、要求ごとに新しいサービスインスタンスを作成します。複数の同時実行モードにより、サービスインスタンスは複数の並列要求を処理できます。単一の要求(PerCall)を処理するためにのみ作成されたサービスインスタンスを使用して、並列要求(複数)を処理するにはどうすればよいですか?

シングルトンサービス(私はConcurrencyMode.Multipleも使用しています)を1000人の同時ユーザーと呼んで発生した問題は、単純にサーバーが非常に多くの同時ユーザーまたはサービスコード/キャッシングが最適化されていません。これは、PerCallインスタンシングを使用して解決されません。

サービスの複数のPerCallインスタンス間でいくつかのキャッシュを共有する場合は、キャッシュを表す既知のオブジェクトをいくつか作成する必要があります。シングルトンパターンまたはサービスロケータを使用します。このオブジェクトは、サービスインスタンスからのキャッシュおよび同時アクセスを処理します。

関連する問題