Marshal.CleanupUnusedObjectsInCurrentContext Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Benachrichtigt die Laufzeit, dass alle im aktuellen Kontext reservierten Runtime Callable Wrapper (RCW) bereinigt werden sollen.
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 ()
- Attribute
Hinweise
Das Interop-System pumpt Nachrichten, während es versucht, RCWs zu bereinigen. Dadurch wird sichergestellt, dass die Bereinigung für Singlethread-Apartment-RCWs (STA) in allen Anwendungen erfolgt, einschließlich Anwendungen, die nicht oft genug pumpen. Einige Anwendungen, die entsprechend pumpen, sind jedoch sehr empfindlich darauf, wo pumpt wird. Wenn das Interop-System Nachrichten in diesen Anwendungen an unerwarteten Stellen pumpt, kann die Anwendung Probleme mit der Wiedereinführung auftreten, die schwer zu diagnostizieren sind. Daher müssen Anwendungen in der Lage sein, ihr eigenes Pumpen für eine bestimmte STA zu steuern und die Bereinigung von RCWs zu steuern.
Entwickler steuern jedoch häufig nur eine Teilmenge der Threads in ihrer Anwendung und können daher nicht sicherstellen, dass alle Threads entsprechend gepumpt werden.
So beheben Sie dieses Problem
Verwenden Sie die -Methode, um die Thread.DisableComObjectEagerCleanup automatische Bereinigung von RCWs und das nachrichtenbasierte Pumpen pro Thread zu deaktivieren. Auf diese Weise können Entwickler die automatische Bereinigung und das entsprechende Nachrichtenpumping deaktivieren.
Verwenden Sie die CleanupUnusedObjectsInCurrentContext -Methode, um die Runtime zu benachrichtigen, um alle RCWs zu bereinigen, die im aktuellen Kontext zugeordnet sind. Mit dieser Begleitmethode können Entwickler genau steuern, wann die Runtime eine Bereinigung im aktuellen Kontext ausführt.