Partilhar via


Método ICorProfilerInfo3::RequestProfilerDetach

Instrui o tempo de execução a desanexar o criador de perfil.

Sintaxe

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parâmetros

dwExpectedCompletionMilliseconds [em] O período de tempo, em milissegundos, o Common Language Runtime (CLR) deve aguardar antes de verificar se é seguro descarregar o profiler.

Devolver Valor

Esse método retorna os seguintes HRESULTs específicos, bem como erros HRESULT que indicam falha do método.

HRESULTADO Description
S_OK A solicitação de desanexação é válida e o procedimento de desanexação agora continua em outro thread. Quando o desanexamento estiver totalmente concluído, um ProfilerDetachSucceeded evento será emitido.
E_CORPROF_E_CALLBACK3_REQUIRED O criador de perfil falhou uma tentativa IUnknown ::QueryInterface para a interface ICorProfilerCallback3 , que ele deve implementar para dar suporte à operação de desanexação. O descolamento não foi tentado.
CORPROF_E_IMMUTABLE_FLAGS_SET O desprendimento é impossível porque o criador de perfil define sinalizadores imutáveis na inicialização. O desprendimento não foi tentado; o criador de perfil ainda está totalmente ligado.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT O desprendimento é impossível porque o criador de perfil usou código de linguagem intermediária comum instrumentada (CIL) ou inseriu enter/leave ganchos. O desprendimento não foi tentado; o criador de perfil ainda está totalmente ligado.

Observação CIL instrumentado é código é código fornecido pelo criador de perfil usando o método SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED O tempo de execução ainda não foi inicializado no aplicativo gerenciado. (Ou seja, o tempo de execução não foi totalmente carregado.) Esse código de erro pode ser retornado quando o desanexamento é solicitado dentro do método ICorProfilerCallback::Initialize do retorno de chamada do profiler.
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach foi chamado em um momento sem suporte. Isso ocorre se o método é chamado em um thread gerenciado, mas não de dentro de um método ICorProfilerCallback ou de dentro de um método ICorProfilerCallback que não pode tolerar uma coleta de lixo. Para obter mais informações, consulte CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Observações

Durante o procedimento de desanexação, o thread de desanexação (o thread criado especificamente para desanexar o profiler) ocasionalmente verifica se todos os threads saíram do código do profiler. O criador de perfil deve fornecer uma estimativa de quanto tempo isso deve levar através do dwExpectedCompletionMilliseconds parâmetro. Um bom valor para usar é a quantidade típica de tempo que o profiler gasta dentro de um determinado ICorProfilerCallback* método, esse valor não deve ser inferior a metade do tempo máximo que o profiler espera gastar.

O thread de desanexação é usado dwExpectedCompletionMilliseconds para decidir quanto tempo dormir antes de verificar se o código de retorno de chamada do criador de perfil foi removido de todas as pilhas. Embora os detalhes do algoritmo a seguir possam mudar em versões futuras do CLR, ele ilustra uma maneira dwExpectedCompletionMilliseconds que pode ser usada ao determinar quando é seguro descarregar o criador de perfil. O fio de descolagem primeiro dorme por dwExpectedCompletionMilliseconds milissegundos. Se, depois de acordar do modo de suspensão, o CLR descobrir que o código de retorno de chamada do criador de perfil ainda está presente, o thread de desanexação será suspenso novamente, desta vez por duas vezes dwExpectedCompletionMilliseconds milissegundos. Se, depois de acordar dessa segunda suspensão, o thread de desanexação descobrir que o código de retorno de chamada do profiler ainda está presente, ele suspenderá por 10 minutos antes de verificar novamente. O thread de desanexação continua a verificar novamente a cada 10 minutos.

Se o criador de perfil especificar dwExpectedCompletionMilliseconds como 0 (zero), o CLR usará um valor padrão de 5000, o que significa que ele executará uma verificação após 5 segundos, novamente após 10 segundos e, em seguida, a cada 10 minutos depois.

Requisitos

Plataformas: Consulte Requisitos do sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: Disponível desde 4

Consulte também