Marshal.CleanupUnusedObjectsInCurrentContext Método

Definição

Notifica o tempo de execução para limpar todos os RCWs (Runtime Callable Wrappers) alocados no contexto atual.

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 ()
Atributos

Comentários

O sistema de interoperabilidade bombeia mensagens enquanto tenta limpar RCWs. Isso garante que a limpeza para RCWs STA (single-threaded apartment) ocorra em todos os aplicativos, incluindo aplicativos que não são bombeados com frequência suficiente. No entanto, alguns aplicativos que bombeiam adequadamente são muito sensíveis ao local em que o bombeamento ocorre. Quando o sistema de interoperabilidade bombeia mensagens nesses aplicativos, em locais inesperados, o aplicativo pode encontrar problemas de reentrância difíceis de diagnosticar. Portanto, os aplicativos precisam ser capazes de controlar seu próprio bombeamento para um STA específico e controlar a limpeza de RCWs.

No entanto, os desenvolvedores geralmente controlam apenas um subconjunto dos threads em seu aplicativo e, portanto, não podem garantir que todos os threads estejam bombeando adequadamente.

Para solucionar esse problema:

  1. Use o Thread.DisableComObjectEagerCleanup método para desativar a limpeza automática de RCWs e o bombeamento de mensagens que ocorre, por thread. Isso permite que os desenvolvedores optem por não fazer a limpeza automática e o bombeamento de mensagens correspondente.

  2. Use o CleanupUnusedObjectsInCurrentContext método para notificar o runtime para limpar todos os RCWs alocados no contexto atual. Esse método complementar permite que os desenvolvedores controlem precisamente quando o runtime executa a limpeza no contexto atual.

Aplica-se a