Compartilhar via


Método de ICorProfilerInfo3::RequestProfilerDetach

Instrui o runtime para desanexar o profiler.

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parâmetros

  • dwExpectedCompletionMilliseconds
    [in] O período de tempo, em milissegundos, o common language runtime (CLR) deve aguardar antes de verificar se é seguro descarregar o profiler. (Para obter mais informações sobre esse parâmetro, consulte os comentários e Profiler anexar e desanexar.)

Valor de retorno

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

HRESULT

Descrição

S_OK

A solicitação de desanexar é válida e o procedimento de desanexar agora continua em outro thread. Quando a separação estiver totalmente concluída, uma ProfilerDetachSucceeded evento é emitido.

CORPROF_E_CALLBACK3_REQUIRED E_

O profiler falha uma IUnknown::QueryInterface tentativa para o ICorProfilerCallback3 interface, que deve implementar para oferecer suporte à operação de desconectar. Desanexar não foi tentada.

CORPROF_E_IMMUTABLE_FLAGS_SET

Desconexão é impossível porque o profiler definir sinalizadores imutáveis na inicialização. Não foi tentada a desconexão; o profiler é anexado ainda totalmente.

CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT

Desconexão é impossível porque o gerador de perfil usado instrumentado código Microsoft intermediate language (MSIL) ou inserido enter/leave ganchos. Não foi tentada a desconexão; o profiler é anexado ainda totalmente.

Notainstrumentado MSIL é o código é o código que é fornecido pelo profiler usando o SetILFunctionBody método.

CORPROF_E_RUNTIME_UNINITIALIZED

O tempo de execução não foi inicializado ainda no aplicativo gerenciado. (Isto é, o tempo de execução não foi totalmente carregado.) Esse código de erro pode ser retornado quando desconexão é solicitada dentro do retorno de chamada profiler ICorProfilerCallback::Initialize método.

CORPROF_E_UNSUPPORTED_CALL_SEQUENCE

RequestProfilerDetachfoi chamado em um tempo sem suporte. Isso ocorre se o método é chamado em um segmento gerenciado, mas não de dentro um ICorProfilerCallback método ou de dentro um ICorProfilerCallback método não pode tolerar uma coleta de lixo. Para obter mais informações, consulte HRESULT DE CORPROF_E_UNSUPPORTED_CALL_SEQUENCE.

Comentários

Durante o procedimento de desanexar o thread de desanexar (aquele criado especificamente para desanexar o perfilador) ocasionalmente verifica se todos os threads tenham saído o código do gerador de perfil. O criador de perfil deve fornecer uma estimativa de quanto tempo isso levará através do dwExpectedCompletionMilliseconds parâmetro. Um bom valor para usar é o típico tempo o profiler gasta dentro de qualquer dado ICorProfilerCallback* método; Esse valor não deve ser menor do que metade da quantidade máxima de tempo que o profiler espera gastar.

O thread de desanexar usa dwExpectedCompletionMilliseconds para decidir quanto em suspensão antes de verificar se código de retorno de chamada do gerador de perfil tem sido retirado todas as pilhas. Embora os detalhes sobre o seguinte algoritmo podem mudar em futuras versões do CLR, ele ilustra uma maneira de dwExpectedCompletionMilliseconds pode ser usado ao determinar quando é seguro descarregar o profiler. O segmento de desanexar primeiro suspende por dwExpectedCompletionMilliseconds milissegundos. Se, após a ativação da suspensão, o CLR encontrar que código de retorno de chamada do gerador de perfil ainda está presente, a thread desanexar dorme novamente, desta vez para duas vezes dwExpectedCompletionMilliseconds milissegundos. Se, após a ativação desta segunda suspensão, o segmento de desanexar encontra o que código de retorno de chamada do gerador de perfil ainda está presente, ele dorme por 10 minutos antes de verificar novamente. O segmento de desanexar continua verificar novamente a cada 10 minutos.

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

Para obter mais informações sobre a desanexação de um gerador de perfil, consulteProfiler anexar e desanexar

Requisitos

Plataformas: Consulte Requisitos de sistema do .NET Framework.

Cabeçalho: Corprof. idl, CorProf.h

Biblioteca: CorGuids.lib

.NET Framework versões: 4

Consulte também

Referência

Interface de ICorProfilerInfo3

Conceitos

Profiler anexar e desanexar

Outros recursos

Interfaces de criação de perfil

A criação de perfil (referência de API não gerenciada)