Object Pooling 기술 샘플

업데이트: 2007년 11월

이 샘플에서는 .NET Framework 환경에서 JIT(Just-in-time) Activation 및 개체 풀링을 사용하는 방법을 보여 줍니다. 서버 응용 프로그램에는 단일 로그 파일을 나타내는 풀링된 단일 개체가 포함되어 있습니다. 여러 클라이언트 응용 프로그램이 풀링된 개체 클래스를 인스턴스화하고 호출함으로써 JIT Activation을 활성화하고 개체 하나에 해당하는 최대 풀 크기를 사용할 때 모든 클라이언트 호출이 단일 개체 인스턴스를 통해 라우트되는 것을 보여 줍니다. 그 결과 COM+ 동작 및 여러 클라이언트 호출을 기록하는 단일 로그 파일이 생성됩니다.

샘플 사용에 대한 내용은 다음 항목을 참조하십시오.

명령 프롬프트를 사용하여 샘플을 빌드하려면

  1. 명령 프롬프트 창을 열고 TTechnologies\ComponentServices\ObjectPooling 디렉터리 아래의 언어별 디렉터리 중 하나로 이동합니다.

  2. 선택한 프로그래밍 언어에 따라 명령줄에 msbuild ObjectPoolingCS.sln 또는 msbuild ObjectPoolingVB.sln을 입력합니다.

Visual Studio를 사용하여 샘플을 빌드하려면

  1. Windows 탐색기를 열고 ObjectPooling 디렉터리 아래의 언어별 하위 디렉터리 중 하나로 이동합니다.

  2. 선택한 프로그래밍 언어에 따라 ObjectPoolingCS.sln 또는 ObjectPoolingVB.sln의 아이콘을 두 번 클릭하여 Visual Studio에서 파일을 엽니다.

  3. 빌드 메뉴에서 솔루션 빌드를 클릭합니다. OPDemoSvr.dll 및 OPDemo.exe 어셈블리가 기본 \bin 또는 \bin\Debug 디렉터리에 빌드됩니다.

어셈블리를 등록하고 GAC에 설치하려면

  1. 빌드된 어셈블리가 있는 디렉터리로 이동합니다.

  2. 명령줄에 regsvcs OPDemoSvr.dll을 입력하여 어셈블리를 등록합니다.

  3. 명령줄에 gacutil –i OPDemoSvr.dll을 입력하여 어셈블리를 GAC에 설치합니다.

이 샘플을 실행하려면

  1. 명령 프롬프트 창이나 Windows 탐색기를 열고 새 실행 파일이 있는 디렉터리로 이동합니다.

  2. 모든 프로그램 메뉴의 관리 도구 하위 메뉴에서 구성 요소 서비스 관리 도구를 엽니다.

  3. 왼쪽의 COM+ 탐색기 창에서 구성 요소 서비스\컴퓨터\내 컴퓨터\COM+ 응용 프로그램을 확장하여 OPDemoSvr COM+ 응용 프로그램을 찾습니다.

  4. OPDemoSvr\구성 요소를 확장하여 Microsoft.Samples.Technologies.ComponentServices.ObjectPooling.PooledLogFile 구성 요소를 찾습니다. PooledLogFile 구성 요소를 마우스 오른쪽 단추로 클릭하고 팝업 메뉴에서 속성을 선택합니다. 활성화 탭을 클릭하고 개체 풀링이 활성화되어 있는지 확인합니다.

    참고:

    이 구성 요소는 최소 풀 크기 0, 최대 풀 크기 1로 구성되어 있습니다. 이렇게 구성하면 클라이언트 코드에서 인스턴스화되는 개체의 수에 관계없이 항상 최대 한 개의 풀링된 개체가 존재하게 됩니다. 이러한 특성은 샘플 코드에서 ObjectPoolingAttribute를 사용하여 명시적으로 설정됩니다. 생성 제한 시간의 경우 샘플 코드에서 명시적으로 다른 값을 요청하지 않으므로 기본값인 60초가 적용됩니다.

  5. 개체 생성 편집 필드의 내용에 유의해야 합니다. 이 필드에는 샘플 풀링 개체에서 만드는 디스크 기반 로그 파일의 이름이 들어 있습니다. 기본값은 OPSvrLogCS.txt 또는 OPSvrLogVB.txt이지만 이름을 변경하거나 C:\OPSvrLogCS.txt와 같이 파일 이름에 경로 정보를 추가할 수 있습니다. 파일 이름에 경로 정보를 추가하지 않으면 파일은 현재의 System32 디렉터리에 만들어집니다.

  6. 확인을 클릭하여 OPDemoServer 구성 요소 속성 대화 상자를 닫습니다.

  7. Windows 탐색기나 명령 프롬프트 창에서 OPDemo.exe를 세 번 실행합니다. 예를 들어, 명령 프롬프트 창에서 C:\Documents and Settings\Your User Name\My Documents\Samples\Technologies\ComponentServices\ObjectPooling\VB\ObjectPooling\bin 디렉터리로 이동한 다음 opdemo.exe를 세 번 입력합니다.

  8. 각각의 클라이언트 응용 프로그램에서 Start Writing 단추를 클릭합니다. OPDemoServer 구성 요소의 개체 생성 문자열에 지정된 로그 파일에 항목이 기록되고 있음을 나타내는 깜빡이는 별표가 클라이언트 창에 표시됩니다.

  9. 모든 클라이언트 응용 프로그램에서 기록을 시작한 후 잠시 기다립니다. 그런 다음 각 클라이언트 응용 프로그램에서 Stop Writing 단추를 클릭합니다.

  10. 로그 파일을 찾아 Notepad.exe 응용 프로그램이나 기타 텍스트 편집기에서 엽니다. 그런 다음 IObjectControl에 대한 COM+ 호출을 나타내는 일련의 문을 찾을 수 있습니다. 이러한 호출 가운데 프로세스 ID로 식별할 수 있는 각 클라이언트 응용 프로그램에서 보낸 메시지가 기록된 것을 볼 수 있습니다. 이를 통해 COM+에서 세 개의 개체 참조를 통한 호출을 단일 개체 인스턴스에 대해 처리했음을 알 수 있습니다. IObjectControl 인터페이스에 대한 자세한 내용은 샘플 코드의 주석 및 플랫폼 SDK를 참조하십시오.

    참고:

    로그 파일을 삭제하거나 이름을 변경하려면 클라이언트 응용 프로그램의 모든 인스턴스를 종료하고 구성 요소 서비스 관리 도구에서 OPDemoSvr 응용 프로그램을 닫아야 합니다. 이를 위해 탐색기의 왼쪽 창에서 COM+ 응용 프로그램을 마우스 오른쪽 단추로 클릭하고 팝업 메뉴에서 종료를 선택합니다.

요구 사항

플랫폼: Windows 2000, Windows XP, Windows Server 2003

.NET Framework 버전: 2.0, 1.1, 1.0

설명

이 샘플에서는 개체 생성 문자열을 사용하여 로그 파일의 이름을 지정하고 필요한 경우 정규화된 경로도 지정합니다. JIT(Just-in-time) Activation은 실제 개체 인스턴스가 존재하지 않더라도 클라이언트가 개체 참조를 만들고 시간 제한 없이 참조를 유지할 수 있게 하는 COM+ 서비스입니다. COM+에서는 참조를 통해 개체가 호출될 때 소비자를 위해 개체를 적시에 활성화합니다. 이 활성화 과정에서 새 개체 인스턴스가 만들어지고, COM+ 개체 풀링과 함께 사용하는 경우에는 풀링된 개체에 대한 참조를 호출자에게 전달하는 작업도 수행됩니다. COM+는 개체 컨텍스트의 완료 비트를 기준으로 개체를 비활성화합니다. .NET에서 서비스하는 구성 요소의 경우, 종료할 때 메서드에서 개체를 비활성화할 수 있음을 나타내는 AutoCompleteAttribute를 클래스 메서드에 적용할 수 있습니다.

구성 요소 서비스 관리 도구에서 볼 수 있듯이 C# 구성 요소의 이름은 OPDemoServerCS.PooledLogFile입니다. Visual Basic 버전은 OPDemoServerVB.PooledLogFile입니다. 샘플의 이진 생성 및 등록 단계에 대한 자세한 내용은 소스 코드 파일의 주석을 참조하십시오.

참고:

샘플을 실행하기 전에 전역 어셈블리 캐시 도구(Gacutil.exe)를 사용하여 OPDemoSvr.dll 어셈블리를 전역 어셈블리 캐시에 설치해야 합니다. Gacutil.exe는 SDK\<version number>\Bin 디렉터리에 있습니다.

COM+ 개체 풀링은 풀링을 위해 구성된 구성 요소를 요청하는 클라이언트가 즉시 사용할 수 있도록 활성 개체의 풀을 유지하는 서비스입니다. 풀은 관리 방식으로 구성하거나 ObjectPoolingAttribute를 사용하여 구성할 수 있습니다. 풀 특성에는 최소 및 최대 풀 크기와 개체 작성 요청 시간 제한 값이 있습니다.

JIT Activation 및 개체 풀링이 활성화된 구성 요소에서는 IObjectControl 인터페이스를 구현하여 구성 요소가 다시 사용되는 방식을 제어할 수 있습니다. IObjectControl 메서드는 개체 활성화/비활성화 프로세스의 키 이벤트를 지정하거나 개체가 개체 풀로 반환될 수 있는지 여부를 확인하기 위해 COM+에 의해서만 호출됩니다. 이 샘플에서는 COM+에서 사용하는 인터페이스를 보여 주기 위한 목적으로만 IObjectControl을 구현합니다. JIT Activation 및 개체 풀링에 대한 자세한 내용은 플랫폼 SDK 설명서를 참조하십시오.

참고 항목

참조

CanBePooled

전역 어셈블리 캐시 도구(Gacutil.exe)

ObjectPoolingAttribute

JustInTimeActivationAttribute

ServicedComponent

System.EnterpriseServices

기타 리소스

Just-In-Time 활성화

개체 생성

서비스되는 구성 요소 작성