同期的に使用される WCF サービスがありますが、サービスは実際にはステートレスであるため、その ConcurrencyMode は ConcurrencyMode.Multiple 値に設定されています。このモードのオーバーヘッドはどれくらいですか? モードを ConcurrencyMode.Single に変更することは理にかなっていますか?
1 に答える
3
単一のサービスインスタンスが同時アクセスを処理する必要があるという事実を除いて、実際にはオーバーヘッドを課しません。200%スレッドセーフである必要があります。これはかなりトリッキーなプログラミングです。
ConcurrencyMode.Singleに切り替えると、プログラミングが簡単になります。サービスクラスの同時実行性について心配する必要はありません。ただし、すべてのリクエストをシリアル化します。一度に1つしか処理できないため、すぐにパフォーマンスのボトルネックになります。
サービスはステートレスであるとおっしゃっていますが、通常合意されているベストプラクティスを使用してみませんか。シングルトンではなく、通常の「コールごとの」サービスクラスです。そのモードでは、各リクエストはサービスクラスの新しいインスタンスを取得し、マルチスレッドプログラミングに煩わされることはありません(すべてのマルチスレッドはWCFランタイムによって処理されます)。複数のリクエストを同時に処理できます。欠点はありません!
于 2010-06-30T14:04:52.093 に答える