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