Compartir a través de


ICorProfilerInfo3::RequestProfilerDetach (Método)

Indica al runtime que desasocie el generador de perfiles.

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parámetros

  • dwExpectedCompletionMilliseconds
    [in] Tiempo, en milisegundos, que Common Language Runtime (CLR) debe esperar antes de comprobar si es seguro descargar el generador de perfiles. (Para obtener más información acerca de este parámetro, vea Comentarios y Asociar y desasociar un generador de perfiles.)

Valor devuelto

Este método devuelve los siguientes HRESULT específicos, así como errores HRESULT que indican la existencia de un error en el método.

HRESULT

Descripción

S_OK

La solicitud de desasociación es válida y ahora el procedimiento de desasociación continúa en otro subproceso. Cuando la operación de desasociación ha finalizado, se emite un evento ProfilerDetachSucceeded.

E_ CORPROF_E_CALLBACK3_REQUIRED

El generador de perfiles produjo un error en un intento de IUnknown::QueryInterface para la interfaz ICorProfilerCallback3, que debe implementar para permitir la operación de desasociación. No se intentó la desasociación.

CORPROF_E_IMMUTABLE_FLAGS_SET

No se puede desasociar porque el generador de perfiles estableció marcas inmutables en el inicio. No se intentó la desasociación; el generador de perfiles sigue totalmente adjuntado.

CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT

No se puede desasociar porque el generador de perfiles utilizó código del Lenguaje Intermedio de Microsoft (MSIL) instrumentado o insertó enlaces enter/leave. No se intentó la desasociación; el generador de perfiles sigue totalmente adjuntado.

Nota: el código MSIL instrumentado es el código que proporciona el generador de perfiles mediante el método SetILFunctionBody.

CORPROF_E_RUNTIME_UNINITIALIZED

El runtime no se ha inicializado todavía en la aplicación administrada. (Es decir, el runtime no se ha cargado totalmente.) Se puede devolver este código de error cuando la desasociación se solicita dentro del método ICorProfilerCallback::Initialize de devolución de llamada del generador de perfiles.

CORPROF_E_UNSUPPORTED_CALL_SEQUENCE

Se llamó a RequestProfilerDetach en un momento no compatible. Esto se produce si se llama al método en un subproceso administrado pero no desde dentro de un método ICorProfilerCallback o desde dentro de un método ICorProfilerCallback que no puede tolerar una recolección de elementos no utilizados. Para obtener más información, vea 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 en ocasiones 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 debe tardar mediante el parámetro dwExpectedCompletionMilliseconds. Un buen valor para usar es la cantidad típica de tiempo que el generador de perfiles pasa dentro de cualquier método ICorProfilerCallback* dado; este valor no debe ser menos de la mitad que el tiempo máximo que el generador de perfiles espera pasar.

El subproceso de desasociación usa dwExpectedCompletionMilliseconds para decidir cuánto tiempo se 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 versiones futuras del CLR, muestra una forma de usar dwExpectedCompletionMilliseconds para determinar cuando es seguro descargar el generador de perfiles. El subproceso de desasociación primero espera para milisegundos dwExpectedCompletionMilliseconds. Si después de volver del estado de suspensión el CLR encuentra que el generador de perfiles del código de devolución de llamada todavía está presente, el subproceso de desasociación entra de nuevo en suspensión, esta vez dos veces dwExpectedCompletionMilliseconds milisegundos. Si después de volver de este segundo estado de suspensión el subproceso de desasociación encuentra que ese generador de perfiles del código de devolución de llamada todavía está presente, entra en suspensión durante 10 minutos antes de realizar la comprobación de nuevo. 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, que significa que realizará una comprobación de la evacuación después de 5 segundos, de nuevo después de 10 segundos y, después, de nuevo cada 10 minutos.

Para obtener más información acerca de desasociar un generador de perfiles, vea Asociar y desasociar un generador de perfiles.

Requisitos

Plataformas: vea Requisitos de sistema de .NET Framework.

Encabezado: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versiones de .NET Framework: 4

Vea también

Referencia

ICorProfilerInfo3 (Interfaz)

Conceptos

Asociar y desasociar un generador de perfiles

Otros recursos

Interfaces para generación de perfiles

Generación de perfiles (Referencia de la API no administrada)