Compartir vía


ICorProfilerInfo3::RequestProfilerDetach (Método)

Indica al CLR que desasocie el generador de perfiles.

Sintaxis

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parámetros

dwExpectedCompletionMilliseconds [in] El período de tiempo, en milisegundos, Common Language Runtime (CLR) debe esperar antes de comprobar si es seguro descargar el generador de perfiles.

Valor devuelto

Este método devuelve los siguientes HRESULT específicos y los errores HRESULT que indican un error del método.

HRESULT Descripción
S_OK La solicitud de desasociación es válida y el procedimiento de desasociación continuará ahora en otro subproceso. Una vez completada totalmente la desasociación, se genera un evento ProfilerDetachSucceeded.
E_CORPROF_E_CALLBACK3_REQUIRED Se produjo un error en el generador de perfiles al intentar una IUnknown::QueryInterface para la interfaz ICorProfilerCallback3 que debe implementar para admitir la operación de desasociación. La desasociación no se intentó.
CORPROF_E_IMMUTABLE_FLAGS_SET No se puede realizar la desasociación porque el generador de perfiles establece marcas inmutables en el inicio. No se intentó la desasociación; el generador de perfiles sigue totalmente asociado.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT El desapego es imposible porque el generador de perfiles usó código de lenguaje intermedio común (CIL) o enlaces insertados enter/leave . No se intentó la desasociación; el generador de perfiles sigue totalmente asociado.

Nota La CIL instrumentada es código que proporciona el generador de perfiles mediante el método SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED El tiempo de ejecución no se ha inicializado aún en la aplicación administrada. (Es decir, el tiempo de ejecución no se cargó completamente). Este código de error se puede devolver cuando se solicita la desasociación dentro del método ICorProfilerCallback::Initialize de la devolución de llamada del generador de perfiles.
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE Se llamó a RequestProfilerDetach en un momento no permitido. Esto ocurre si se llama al método en un subproceso administrado pero no desde un método ICorProfilerCallback o desde un método ICorProfilerCallback que no tolera una recolección de elementos no utilizados. Para más información, consulte CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Comentarios

Durante el procedimiento de desasociación, el subproceso de desasociación (el subproceso creado específicamente para desasociar el generador de perfiles) comprueba ocasionalmente si todos los subprocesos han salido del código del generador de perfiles. El generador de perfiles debe proporcionar una estimación de cuánto tiempo deben tardar usando para ello el parámetro dwExpectedCompletionMilliseconds. Un valor adecuado es la cantidad de tiempo típica que el generador de perfiles invierte dentro de un método ICorProfilerCallback* cualquiera; este valor no debe ser menor que la mitad de la cantidad máxima de tiempo que el generador de perfiles espera invertir.

El subproceso de desasociación usa dwExpectedCompletionMilliseconds para decidir cuánto tiempo debe esperar antes de comprobar si el código de devolución de llamada del generador de perfiles se ha extraído de todas las pilas. Aunque los detalles del siguiente algoritmo pueden cambiar en futuras versiones del CLR, ilustra una forma de usar dwExpectedCompletionMilliseconds para determinar cuándo es seguro descargar el generador de perfiles. El subproceso de desasociación espera primero dwExpectedCompletionMilliseconds milisegundos. Si después de volver del estado de suspensión, el CLR descubre que aún hay código de devolución de llamada del generador de perfiles, el subproceso de desasociación se pone de nuevo en suspensión, esta vez durante dwExpectedCompletionMilliseconds milisegundos por dos. Si después de volver de este segundo estado de suspensión, el subproceso de desasociación descubre que aún hay código de devolución de llamada del generador de perfiles, entra en suspensión durante 10 minutos antes de volver a comprobar. El subproceso de desasociación sigue realizando la comprobación cada 10 minutos.

Si el generador de perfiles especifica dwExpectedCompletionMilliseconds como 0 (cero), el CLR usa un valor predeterminado de 5000, lo que significa que realizará una comprobación después de 5 segundos, otra vez después de 10 segundos y, a partir de entonces, cada 10 minutos.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versiones de .NET Framework: disponible a partir de la versión 4

Consulte también