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 ()
属性

注解

互操作系统在尝试清理 RCW 时泵送消息。 这可确保在所有应用程序中进行单线程单元(STA)RCW 的清理,包括不经常抽水的应用程序。 但是,一些适当地进行泵的应用程序对泵的发生非常敏感。 当互操作系统在这些应用程序(意外的位置)中泵送消息时,应用程序可能会遇到难以诊断的重新进入问题。 因此,应用程序需要能够控制特定 STA 的自己的泵送,并控制 RCW 的清理。

但是,开发人员通常只控制其应用程序中的一部分线程,因此无法确保所有线程都适当地泵送。

要解决此问题,请执行以下操作:

  1. 使用该方法 Thread.DisableComObjectEagerCleanup 可以关闭 RCW 的自动清理,以及基于每个线程发生的消息泵送。 这样,开发人员就可以选择退出自动清理,以及相应的消息泵送。

  2. CleanupUnusedObjectsInCurrentContext使用该方法通知运行时清理当前上下文中分配的所有 RCW。 借助此配套方法,开发人员可以精确控制运行时在当前上下文中何时执行清理。

适用于