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。 借助此配套方法,开发人员可以精确控制运行时何时在当前上下文中执行清理。

适用于