Método ICorProfilerInfo3::RequestProfilerDetach

Instrui o runtime a desanexar o criador de perfil.

Sintaxe

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parâmetros

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

Valor de retorno

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

HRESULT Descrição
S_OK A solicitação de desanexação é válida e o procedimento de desanexação agora continua em outro thread. Quando a desanexação estiver totalmente concluída, um evento ProfilerDetachSucceeded será emitido.
E_CORPROF_E_CALLBACK3_REQUIRED O criador de perfil falhou em uma tentativa IUnknown::QueryInterface para a interface ICorProfilerCallback3, que deve ser implementada para dar suporte à operação de desanexação. A desanexação não foi tentada.
CORPROF_E_IMMUTABLE_FLAGS_SET A desanexação é impossível porque o criador de perfil define sinalizadores imutáveis na inicialização. A desanexação não foi tentada. O criador de perfil ainda está totalmente anexado.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT O descolamento é impossível porque o criador de perfil usou código CIL (Common Intermediate Language) instrumentado ou ganchos inseridos enter/leave . A desanexação não foi tentada. O criador de perfil ainda está totalmente anexado.

Observação CIL instrumentada é código é código que é fornecido pelo criador de perfil usando o método SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED O runtime ainda não foi inicializado no aplicativo gerenciado. (Ou seja, o runtime não foi totalmente carregado.) Esse código de erro pode ser retornado quando a desanexação é solicitada dentro do método ICorProfilerCallback::Initialize do criador de perfil.
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, confira HRESULT CORPROF_E_UNSUPPORTED_CALL_SEQUENCE.

Comentários

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

O thread de desanexação usa dwExpectedCompletionMilliseconds para decidir o tempo suspensão antes de verificar se o código de retorno de chamada do criador de perfil foi retirado de todas as pilhas. Embora os detalhes do algoritmo a seguir possam ser alterados em versões futuras do CLR, ele ilustra uma maneira como o dwExpectedCompletionMilliseconds pode ser usado ao determinar quando é seguro descarregar o criador de perfil. Primeiro, o thread de desanexação fica suspenso por dwExpectedCompletionMilliseconds milissegundos. Se, depois de acordar do sono, o CLR descobrir que o código de retorno de chamada do criador de perfil ainda está presente, o thread de desanexação ficará novamente em suspenso, desta vez duas vezes por dwExpectedCompletionMilliseconds milissegundos. Se, depois de sair dessa segunda suspensão, o thread de desanexação descobrir que o código de retorno de chamada do criador de perfil ainda está presente, ele dormirá 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 5.000, 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 disso.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: disponíveis desde 4

Confira também