次の方法で共有


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

適用対象