Share via


COM+ Just-In-Time 활성화 개념

JIT(Just-In-Time) 활성화 서비스를 사용하면 클라이언트가 여전히 해당 개체에 대한 활성 참조를 보유하는 동안 COM+에서 개체를 비활성화할 수 있습니다. 다음에 클라이언트가 여전히 활성 상태인 것으로 생각되는 개체에서 메서드를 호출할 때 COM+ JIT 활성화 서비스는 개체를 클라이언트에 투명하게 다시 활성화합니다.

COM + JIT 활성화를 사용하는 기본 이점은 클라이언트가 메모리와 같은 중요한 서버 리소스를 반드시 연결하지 않고도 필요한 한 개체에 대한 참조를 보유할 수 있도록 할 수 있다는 것입니다. 다른 중요한 이점은 다음과 같습니다.

  • COM+ JIT 활성화 서비스를 사용하면 클라이언트가 고가의 서버 개체 및 서버 리소스를 사용하는 방법을 생각할 필요가 없으므로 클라이언트의 프로그래밍 모델이 크게 간소화됩니다. JIT 활성화가 없으면 클라이언트는 개체를 자주 호출하고 해제해야 할 때 상당한 페널티를 받을 수 있습니다.

    참고

    COM+ 개체 풀링 서비스를 사용하여 이 성능 이점을 더 구체화할 수 있습니다. JIT 활성화 개체를 풀링하면 클라이언트가 보유할 수 있는 리소스를 재사용하는 동안 클라이언트의 개체 다시 활성화 속도를 크게 높일 수 있으므로 서버의 지정된 개체에서 사용되는 메모리 양을 보다 정확하게 제어할 수 있습니다. 자세한 내용은 개체 풀링 및 COM+ JIT 활성화를 참조하세요.

     

  • 분산 애플리케이션을 사용하면 모든 개체를 만드는 데 비용이 많이 드는 네트워크 왕복이 필요하며 클라이언트가 서버에서 멀리 떨어져 있으면 서버 개체를 활성화 및 마샬링하고 채널을 열고 프록시 및 스텁을 설정하는 데 드는 비용이 더 큽니다. COM+ JIT 활성화 서비스를 사용하면 개체 생성 빈도를 최소화하여 애플리케이션의 성능을 크게 향상시킬 수 있습니다.

  • COM+ JIT 활성화를 사용하여 클라이언트가 수명이 긴 참조를 보유하지만 항상 사용하지 않는 개체를 활성화하는 경우 서버 메모리가 항상 해당 개체를 활성 상태로 유지하는 것은 아닙니다. 이렇게 하면 애플리케이션의 확장성이 크게 증가할 수 있습니다. 클라이언트에서 볼 수 있는 유일한 성능 적중은 COM+에서 개체를 다시 활성화하는 데 걸리는 시간이며, 일반적으로 개체에 대한 메모리를 할당하는 데 걸리는 시간보다 약간 더 많고 원격 개체를 만들기 위한 네트워크 왕복보다 훨씬 적습니다.

COM+ JIT 활성화 사용

구성 요소 서비스 관리 도구 또는 관리 함수를 사용하여 구성 요소에 대해 COM+ JIT 활성화 서비스를 사용하도록 설정할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 구성 요소에 JIT 활성화 사용을 참조하세요.

COM+ JIT 활성화는 다음과 같은 다른 COM+ 서비스와 상호 작용할 수 있습니다.

  • 구성 요소에 트랜잭션이 필요한 경우 JIT 활성화가 자동으로 활성화됩니다. 자세한 내용은 트랜잭션 및 COM+ JIT 활성화를 참조하세요.
  • 구성 요소가 JIT 활성화를 사용하도록 설정되면 동기화가 자동으로 필수로 설정됩니다. 즉, 두 클라이언트가 동시에 JIT 활성화 구성 요소를 호출하고 그 중 하나에 대한 메서드 호출이 반환되면 개체가 비활성화되고 다른 클라이언트는 좌초되지 않습니다.

비활성화가 트리거되는 방법

COM+는 개체 컨텍스트에서 완료 비트의 상태 따라 개체를 비활성화합니다. 개체는 이 비트를 사용하여 지정된 메서드 호출 중에 완료되었는지, 즉 비활성화할 준비가 되었는지 여부를 알릴 수 있습니다. 자세한 내용은 완료 비트 설정을 참조하세요.

자동 완성 속성 사용

Component Services 관리 도구를 사용하여 메서드 반환에서 개체가 자동으로 비활성화되도록 메서드를 구성할 수 있습니다. 이 속성을 설정하는 방법에 대한 지침은 메서드에 대해 자동 완료 사용을 참조하세요. 이 옵션을 선택하면 트랜잭션에서 투표에 대한 반복적인 메서드 호출을 제거할 수 있습니다. 일관성 비트에 대한 기본 설정은 True이므로 완료 비트를 True로 변경하고 이러한 설정을 변경하는 작업을 수행하지 않으면 메서드가 반환된 후 IObjectContext::SetComplete 가 자동으로 호출됩니다.

그러나 이 동작에는 한 가지 주의할 점이 있습니다. COM+는 메서드가 반환하는 HRESULT를 검사합니다. 해당 HRESULT가 실패를 나타내는 경우 일관성 비트는 False로 설정되고 결과는 IObjectContext::SetAbort를 호출한 경우와 동일합니다.

요약하자면, 메서드에 대해 자동 완료를 선택하고 비트를 설정하는 작업을 수행하지 않고 HRESULT(hr)가 반환되면 다음이 적용됩니다.

  • SUCCEEDS(hr)이면 SetComplete를 호출한 것처럼 표시됩니다.
  • FAILED(hr)이면 SetAbort를 호출한 것처럼 표시됩니다.

IObjectControl을 사용하여 개체 활성화 및 비활성화 관리

COM+ 런타임이 개체에 대한 비활성화 및 다시 활성화를 자동으로 관리할 수 있도록 IObjectControl 인터페이스를 구현할 수 있습니다. 개체가 이 인터페이스를 구현하는 경우 COM+는 개체를 비활성화할 때 IObjectControl::D를 호출하고, 개체를 다시 활성화할 때 IObjectControl::Activate 를 호출합니다. 이러한 메서드를 사용하면 개체 활성화 시 자동 컨텍스트 초기화 및 비활성화 시 상태 정리가 가능합니다.

COM+ JIT 활성화를 사용하는 개체를 풀링하는 경우 IObjectControl을 구현하는 것이 좋습니다. 자세한 내용은 개체 풀링 및 COM+ JIT 활성화를 참조하세요.

상태 비활성 및 JIT 활성화

트랜잭션 경계 간에 상태를 공유할 수 없으므로 트랜잭션 개체는 반드시 상태 비 상태입니다. 따라서 개체가 비활성화 시 손실될 상태가 없는 경우에만 JIT 활성화를 사용합니다. 그렇지 않으면 트랜잭션의 격리를 위반합니다. 트랜잭션 개체의 자연스러운 사용 패턴으로 인해 일부 작업 단위를 수행하고 트랜잭션이 커밋되거나 중단될 때 개체를 해제합니다. JIT 활성화 및 자동 트랜잭션은 밀접하게 관련되어 있습니다. 트랜잭션이 필요하도록 개체를 구성하면 COM+ JIT를 자동으로 활성화할 수 있습니다.

COM+ Just-In-Time 활성화 작업

개체 풀링 및 COM+ JIT 활성화

트랜잭션 및 COM+ JIT 활성화