CCW
업데이트: 2007년 11월
COM 클라이언트가 .NET 개체를 호출하는 경우 공용 언어 런타임은 해당 개체에 대해 관리되는 개체와 CCW(COM Callable Wrapper)를 만듭니다. .NET 개체를 직접 참조할 수 없는 경우 COM 클라이언트는 CCW를 관리되는 개체의 프록시로 사용합니다.
런타임은 서비스를 요청하는 COM 클라이언트 수와 관계 없이 관리되는 개체에 대해 CCW를 하나만 만듭니다. 다음 그림과 같이 다수의 COM 클라이언트가 INew 인터페이스를 노출하는 CCW에 대한 참조를 보유할 수 있습니다. 그리고 CCW는 인터페이스를 구현하는 관리되는 개체에 대한 단일 참조를 보유하며 가비지 수집됩니다. COM과 .NET 클라이언트 모두 동일한 관리되는 개체를 동시에 요청할 수 있습니다.
CCW를 사용하여 .NET 개체에 액세스
CCW는 .NET Framework 내에서 실행 중인 다른 클래스에서 볼 수 없습니다. CCW의 기본 목적은 관리 코드와 비관리 코드 사이의 호출을 마샬링하는 것이지만 또한 CCW가 래핑하는 관리되는 개체의 개체 ID와 개체 수명을 관리합니다.
개체 ID
런타임은 필요한 경우 개체를 메모리에서 이리 저리 이동할 수 있도록 가비지 수집된 힙에서 .NET 개체에 대한 메모리를 할당합니다. 이와 대조적으로 CCW에 대해서는 COM 클라이언트가 래퍼를 직접 참조할 수 있도록 수집되지 않은 힙에서 메모리를 할당합니다.
개체 수명
CCW가 래핑하는 .NET 클라이언트와 달리 CCW는 기존의 COM 방식으로 횟수가 계산된 참조입니다. CCW의 참조 횟수가 0이 되면 래퍼는 관리되는 개체에서 참조를 해제합니다. 다음 가비지 수집 주기 동안 남은 참조가 없는 관리되는 개체가 수집됩니다.
참고 항목
개념
참조
CCW