3


0

WCF名前付きパイプサービスの設定

名前付きパイプを使用するときにパフォーマンスをいくらか節約するために、ConcurrencyMode.MultipleおよびInstanceContextMode.Single属性でサービスを設定する価値はありますか?

そうすると、マルチスレッドの問題に悩まされることになります。

2 回答


3


その価値はありますか? それは、実装するのがどれほど難しいかと比較して、パフォーマンスの向上をどれだけ評価するかにかかっています。

パフォーマンスの向上はどの程度ですか? それはアプリケーションに依存します。 あなただけがその質問に答えることができます。

パフォーマンスと同様に、*測定*する必要があります。

すでに十分に速い場合は、気にしないでください。

十分に高速でない場合は、アプリケーションがどこで時間を費やしているかを測定します。 アウトプロセスのリソースアクセスを伴うほとんどのアプリケーション(例: データベースアクセス)、ボトルネックはWCFサービスのInstanceContextModeではなく、ここにあります。

ただし、WCFサービスとはどのようなアプリケーションかを記述しないため、場合によっては違いが生じる可能性があります。


3


通常、サービスが複数の要求を同時に処理できると予想されるため、WCFサービスにはConcurrencyMode.Multipleを自動的に使用します。 私にとって、これはサービスの最も直感的な動作のように思えます(つまり、Webサービスを呼び出して、他のユーザーからの未処理のリクエストを10回待ってから参加するのは奇妙です)。

ConcurrencyMode.Singleを使用すると、サービスは一度に1つの要求を処理します(複数の要求がキューに入れられた場合)。 これにより、潜在的にリクエストが遅くなります。

しかし、それは各リクエストが何をするかに依存します。 単純な数学計算または文字列操作が非常に高速になるため、WCFのオーバーヘッドが主なボトルネックになります。 サービスが何らかのデータベースを照会または変更する場合、データベース操作を実行する時間がボトルネックになる可能性があります。 しかし、データベースが小さい場合、または少数のクライアントしか期待していない場合は、おそらく違いに気付かないでしょう。 5つのWebサービスからデータを取得し、いくつかの複雑なマージ操作を実行している場合、これは問題になる可能性があります。

複数の同時要求があることがわかっている場合を除き、何らかの客観的なパフォーマンス基準が満たされなくなるまで、ConcurrencyMode.Singleで実行します。 次に、通常のベンチマークを実行して、サービスのどの部分が最も遅いかを把握する必要があります。 少しスピードアップ。 ConcurrencyMode.Singleが低速ビットである場合は、代わりに複数に進みます!