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 をクリーンアップするようにランタイムに通知します。 このコンパニオン メソッドを使用すると、開発者は、ランタイムが現在のコンテキストでクリーンアップを実行するタイミングを正確に制御できます。

適用対象