Marshal.CleanupUnusedObjectsInCurrentContext 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通知运行时清理当前上下文中分配的所有 运行时可调用包装器(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 的清理。
但是,开发人员通常只控制其应用程序中的一部分线程,因此无法确保所有线程都适当地泵送。
要解决此问题,请执行以下操作:
使用该方法 Thread.DisableComObjectEagerCleanup 可以关闭 RCW 的自动清理,以及基于每个线程发生的消息泵送。 这样,开发人员就可以选择退出自动清理,以及相应的消息泵送。
CleanupUnusedObjectsInCurrentContext使用该方法通知运行时清理当前上下文中分配的所有 RCW。 借助此配套方法,开发人员可以精确控制运行时在当前上下文中何时执行清理。