ジャスト イン タイム アクティベーション
COM+ ジャスト イン タイム (JIT: Just-in-Time) アクティベーション サービスによって、アイドル状態のサーバーのリソースをより生産的に使用できます。コンポーネントの JIT アクティベーションが有効になっている場合、COM+ では、クライアントがそのコンポーネントのオブジェクトへのアクティブな参照を保持していても、そのオブジェクトのインスタンスを非アクティブにすることができます。次回に、クライアントがそのオブジェクトのメソッドを呼び出すと、COM+ ではクライアントで特別な処理を行わなくても、"ジャスト イン タイム" でオブジェクトが再びアクティブになります。 **
メモ JIT アクティベーションが有効なコンポーネントでは、オブジェクトは最初に作成されたときにアクティブになります。
メソッド呼び出しが戻った時点で COM+ はオブジェクトを非アクティブにしますが、コンテキストはメモリ内に残ります。非アクティブになったオブジェクトは、負荷のかかるデータ ストアに対するロックを含め、すべてのリソースを解放します。
メモ パフォーマンスの点では、ServicedComponent の派生クラスにファイナライザを実装せずに、このロジックを DisposeObject メソッドに配置することをお勧めします。ServicedComponent プロキシにはファイナライザが含まれますが、このプロキシはリフレクションを使用して ServicedComponent の派生クラスのファイナライザを呼び出します。
JIT アクティベーションを有効にするには、System.EnterpriseServices.ServicedComponent から派生させたクラスに JustInTimeActivationAttribute 属性を適用します。また、メソッドの呼び出しから制御が戻ったときにオブジェクトを非アクティブにするには、オブジェクトの done ビットを設定する必要があります。トランザクション コンポーネントについては、クラスに AutoCompleteAttribute を適用するか、ContextUtil.SetComplete または ContextUtil.SetAbort を呼び出します。非トランザクション コンポーネントについては、ContextUtil.DeactivateOnReturn を呼び出します。
メモ 自動トランザクションでは JIT アクティベーションが必要なので、クラスの自動トランザクションを構成すると、JIT アクティベーションが暗黙的に有効になります。
TestObjectPooling
クラスのインスタンスで JIT アクティベーションおよび JIT 非アクティベーションを有効にする方法を次の例で示します。
<JustInTimeActivation()> _
Public Class TestObjectPooling
Inherits ServicedComponent
[C#]
[JustInTimeActivation]
public class TestObjectPooling : ServicedComponent
参照
利用可能な COM+ サービスの概要 | JustInTimeActivationAttribute クラス | System.EnterpriseServices