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

개체 풀링이 특정 상황에서 매우 효과적일 수 있으므로 성능이 크게 향상됩니다. 최상의 이점을 위해 개체를 다시 사용하는 일반적인 아이디어는 가능한 한 많은 리소스를 풀링하고, 수행된 실제 작업에서 초기화를 고려한 다음, 배포 시 풀 특성을 실제 하드웨어에 관리적으로 조정하는 것입니다. 즉, 다음 단계에 따라 진행해야 합니다.

  1. 클라이언트 대신 실제 작업을 수행하기 위한 필수 조건으로 모든 클라이언트에 대해 수행되는 비용이 많이 드는 초기화 및 리소스 획득을 고려하도록 개체를 작성합니다. 많은 개체 생성자를 가능한 한 많은 리소스를 풀에 작성하여 클라이언트가 풀에서 개체를 가져올 때 즉시 사용할 수 있도록 합니다.
  2. 사용 가능한 하드웨어 리소스에서 최상의 균형을 달성하도록 풀을 관리적으로 구성합니다. 일반적으로 클라이언트 액세스 및 개체 사용에 대한 대가로 특정 크기의 풀을 유지 관리하는 데 전념하는 메모리를 거래합니다. 특정 시점에서 풀링하면 수익이 감소하고 특정 구성 요소의 리소스 사용 가능성을 제한하면서 충분한 성능을 얻을 수 있습니다.

실제 작업 수행 또는 리소스 획득

클라이언트가 짧고 빠르게 연속해서 사용할 구성 요소가 있는 경우 개체 사용 시간의 상당 부분이 리소스를 획득하거나 클라이언트에 대한 특정 작업을 수행하기 전에 초기화하는 데 소요되는 경우 개체 풀링을 사용하도록 구성 요소를 작성하는 것이 큰 성공이 될 수 있습니다.

개체의 생성자에서 하나 또는 여러 연결을 획득하고, 스크립트를 실행하고, 파일 또는 네트워크를 통해 초기화 데이터를 가져오는 등 모든 클라이언트에 대해 가능한 한 균일한 많은 시간이 소요되는 작업을 수행할 수 있도록 구성 요소를 작성할 수 있습니다. 이렇게 하면 이러한 모든 리소스를 풀링하는 효과가 있습니다. 일부 작업을 수행하는 데 필요한 리소스와 일반 상태의 조합을 풀링하고 있습니다.

이 경우 클라이언트가 풀에서 개체를 가져올 때 해당 리소스를 즉시 사용할 수 있습니다. 일반적으로 개체를 사용하여 일부 작은 작업 단위, 데이터 푸시 또는 끌어오기를 수행하고 개체 는 IObjectContext::SetComplete 또는 IObjectContext::SetAbort 를 호출하고 반환합니다. 이와 같은 신속한 사용 패턴을 사용하면 풀링이 뛰어난 성능 이점을 얻을 수 있습니다. 상태 비저장 자동 트랜잭션 프로그래밍 모델의 단순성을 완전히 활용하면서도 기존 상태 저장 구성 요소와 동등한 성능을 달성할 수 있습니다.

그러나 클라이언트가 개체를 호출할 때마다 오랫동안 개체를 사용하는 경우 풀링이 덜 의미가 있습니다. 초기화 시간에 비해 사용 시간이 증가함에 따라 얻을 수 있는 속도 이점은 미미합니다. 활성 개체 풀을 보유하는 데 필요한 메모리 비용을 정당화하지 않을 수 있는 감소 반환이 발생합니다.

여러 클라이언트에서 비용 공유

초기화를 고려할 때의 변형은 풀링을 사용하여 값비싼 리소스를 획득하는 비용을 통계적으로 상각할 수 있다는 것입니다. 획득 또는 초기화가 적중한 후 개체를 다시 사용하는 경우 해당 수명 동안 개체를 사용하는 모든 클라이언트에서 해당 비용을 공유합니다. 무거운 생성 시간은 개체당 한 번만 발생합니다.

개체 사전 할당

0이 아닌 최소 풀 크기를 지정하면 애플리케이션이 시작될 때 최소 개체 수가 만들어지고 풀이 생성되며 애플리케이션에 호출하는 모든 클라이언트에 대해 준비됩니다.

풀 관리에서 리소스 사용 관리

최대 풀 크기를 사용하여 리소스를 사용하는 방법을 매우 정확하게 제어할 수 있습니다. 예를 들어 특정 수의 데이터베이스 연결 라이선스를 부여한 경우 언제든지 열려 있는 연결 수를 제어할 수 있습니다.

클라이언트 사용 패턴, 개체 사용 특성 및 메모리 및 연결과 같은 물리적 리소스를 고려할 때 성능 튜닝을 수행할 때 최적의 균형 지점을 찾을 수 있습니다. 풀링 개체는 특정 지점 이후 감소 반환을 생성합니다. 필요한 성능 수준을 결정하고 이를 달성하는 데 필요한 리소스와 균형을 맞출 수 있습니다.

개체 풀링을 구성할 때 성능 튜닝을 용이하게 하려면 애플리케이션의 구성 요소에 대한 개체 통계를 모니터링할 수 있습니다. 자세한 내용은 개체 통계 모니터링을 참조하세요.

JIT-Activated 구성 요소의 성능 향상

개체 풀링이 COM+ Just-In-Time 정품 인증 서비스에서 매우 잘 작동합니다. JIT 활성화되는 개체를 풀링하면 개체 다시 활성화 속도를 높일 수 있습니다. 재활성화 비용을 완화하면서 JIT 활성화를 통해 채널을 열어 두는 이점을 얻을 수 있습니다. 이 경우 풀링을 사용하여 참조가 활성 상태인 개체에 할당하려는 메모리의 양을 제어할 수 있습니다.

트랜잭션일 때 JIT 활성화 구성 요소를 풀링할 가능성이 가장 높습니다. 개체 풀링이 트랜잭션 구성 요소를 처리하도록 최적화되어 있습니다. 자세한 내용은 트랜잭션 개체 풀링을 참조하세요.

COM+ 개체 생성자 문자열

개체 수명 및 상태 제어

개체 풀링 작동 방식

트랜잭션 개체 풀링

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