1

WCF serviceとして構成されているがありますPerCall。各呼び出しは、バックエンドデータベースへの接続を設定し、一連Entity Frameworkのアセンブリをロードします。

アセンブリのロードはどのように機能しWCFますか、呼び出しごとにロードされますか、それともサービスの存続期間ごとに1回ロードされますか?

PerSessionこの点で代わりに切り替えることの利点はありますか、それともこれは問題ではありませんか?

4

1 に答える 1

2

dllのコピーが1つだけロードされます。

違いは、メモリ内のオブジェクトのインスタンスとデータベースへの接続にあります。

たとえば、ソリューションにデータベースへの接続を確立する単一のdllがある場合。サーバーが再起動したと仮定します。呼び出しごと:

  • 呼び出し1がDLLに着信し、メモリにロードされ、JITがコンパイルされます
  • サービスのインスタンスが作成されます
  • データベースへの接続が作成されます
  • その後、この呼び出しは完了します
  • 接続は接続プールに解放されます
  • サービスのインスタンスは破棄され、ガベージコレクションによってクリーンアップされます。
  • 次に、2と3を同時に呼び出します
  • dllがロードされ、JITがコンパイルされるため、ここでは機能しません
  • 2と3に対して2つのインスタンスが作成されます
  • 1つの接続が接続プールから取得されます
  • 1つの接続が作成されます
  • その後、通話が完了します
  • 接続は接続プールに解放されます
  • サービスのインスタンスは破棄され、ガベージコレクションによってクリーンアップされます。

常に、最初のヒット時にJITコンパイルされたDLLの単一コピー。

  • 呼び出しごと、呼び出しの終了時に破棄される呼び出しごとのインスタンス。
  • セッションごと、セッションの有効期限が切れたときに破棄されるセッションごとのインスタンス
  • 単一、単一インスタンス
于 2012-09-12T16:51:37.983 に答える