개체 풀링 작동 방식

구성 요소를 풀링하도록 구성하면 COM+는 구성 요소를 요청하는 모든 클라이언트에 대해 활성화할 준비가 된 풀에서 해당 구성 요소의 인스턴스를 유지 관리합니다. 모든 개체 만들기 요청은 풀 관리자를 통해 처리됩니다.

풀은 구성 요소별로 구성 및 유지 관리됩니다. 풀은 동일한 CLSID를 공유하는 동종 개체로 구성됩니다. 유일한 예외는 트랜잭션이 보류 중인 동안 트랜잭션 선호도가 있는 개체를 포함하는 하위 풀이 유지 관리되는 트랜잭션 개체에 대한 것입니다.

애플리케이션이 시작되면 개체 만들기가 성공하는 한 풀이 관리적으로 지정한 최소 수준까지 채워집니다. 구성 요소에 대한 클라이언트 요청이 들어오면 풀에서 선착순으로 충족됩니다. 풀을 사용할 수 있는 개체가 없고 풀이 지정된 최대 수준에 아직 없는 경우 클라이언트에 대해 새 개체가 만들어지고 활성화됩니다.

풀이 최대 수준에 도달하면 클라이언트 요청이 큐에 대기되고 풀에서 사용 가능한 첫 번째 개체를 받게 됩니다. 활성화된 개체와 비활성화된 개체의 수는 최대 풀 값을 초과하지 않습니다. 개체 만들기 요청은 클라이언트가 개체 만들기를 기다리는 시간을 제어할 수 있도록 관리적으로 지정된 기간 후에 시간이 초과됩니다. 제한 시간이 초과되면 클라이언트는 CoCreateInstance에서 E_TIMEOUT 오류를 다시 가져옵니다.

가능하면 COM+는 풀이 최대 수준에 도달할 때까지 클라이언트가 개체를 해제한 후 개체를 다시 사용하려고 시도합니다. 개체는 상태를 모니터링하여 다시 사용할 수 있는지 여부를 확인하고 IObjectControl::CanBePooled에 적절한 값을 반환해야 합니다.

풀된 개체를 만들면 개체의 수명을 관리하는 더 큰 개체로 집계됩니다. 외부 개체는 다음과 같이 개체의 수명 주기에서 적절한 시간에 IObjectControl 에서 메서드를 호출합니다.

  • Activate 메서드는 특정 컨텍스트에서 활성화된 개체가 클라이언트에 반환될 때마다 호출됩니다.
  • Deactivate 메서드는 클라이언트에서 개체를 해제하거나 JIT 활성화 개체의 경우 비활성화될 때마다 호출됩니다.
  • CanBePooled 메서드는 개체가 일반 풀로 반환될 때마다 호출됩니다. 개체가 재사용 가능한 일부 리소스가 잘못된 상태임을 감지하면 이 메서드에 대해 FALSE 를 반환해야 하며 풀 관리자는 개체를 삭제합니다.

개체가 반드시 IObjectControl을 구현할 필요는 없습니다. 그렇지 않으면 풀 최대 수준에 도달할 때까지 인스턴스가 항상 재사용됩니다.

구성 요소를 풀로 구성하는 방법에 대한 자세한 내용은 구성 요소를 풀로 구성을 참조하세요.

COM+ 개체 생성자 문자열

개체 수명 및 상태 제어

개체 풀링을 사용하여 성능 향상

트랜잭션 개체 풀링

풀 가능 개체에 대한 요구 사항