Marshal.CleanupUnusedObjectsInCurrentContext 메서드

정의

현재 컨텍스트에 할당된 모든 RCW(런타임 호출 가능 래퍼) 를 정리하도록 런타임에 알릴 수 있습니다.

public:
 static void CleanupUnusedObjectsInCurrentContext();
public static void CleanupUnusedObjectsInCurrentContext();
[System.Security.SecurityCritical]
public static void CleanupUnusedObjectsInCurrentContext();
static member CleanupUnusedObjectsInCurrentContext : unit -> unit
[<System.Security.SecurityCritical>]
static member CleanupUnusedObjectsInCurrentContext : unit -> unit
Public Shared Sub CleanupUnusedObjectsInCurrentContext ()
특성

설명

interop 시스템은 RCW를 정리하는 동안 메시지를 펌핑합니다. 이렇게 하면 충분히 자주 펌프하지 않는 애플리케이션을 포함하여 모든 애플리케이션에서 STA(단일 스레드 아파트) RCW에 대한 정리가 수행됩니다. 그러나 펌프를 적절하게 수행하는 일부 애플리케이션은 펌핑이 발생하는 위치에 매우 민감합니다. interop 시스템이 이러한 애플리케이션에서 예기치 않은 위치에서 메시지를 펌핑하면 애플리케이션에서 진단하기 어려운 재진입 문제가 발생할 수 있습니다. 따라서 애플리케이션은 특정 STA에 대한 자체 펌핑을 제어하고 RCW 정리를 제어할 수 있어야 합니다.

그러나 개발자는 종종 애플리케이션에서 스레드의 하위 집합만 제어하므로 모든 스레드가 적절하게 펌핑되는지 확인할 수 없습니다.

이 문제를 해결하려면 다음을 수행합니다.

  1. 메서드를 Thread.DisableComObjectEagerCleanup 사용하여 RCW의 자동 정리를 해제하고 스레드별로 발생하는 메시지 펌핑을 해제합니다. 이를 통해 개발자는 자동 정리 및 해당 메시지 펌핑을 옵트아웃할 수 있습니다.

  2. 이 메서드를 CleanupUnusedObjectsInCurrentContext 사용하여 현재 컨텍스트에서 할당된 모든 RCW를 정리하도록 런타임에 알립니다. 이 도우미 메서드를 사용하면 개발자가 런타임이 현재 컨텍스트에서 정리를 수행하는 시기를 정확하게 제어할 수 있습니다.

적용 대상