Condividi tramite


Metodo ICorProfilerInfo3::RequestProfilerDetach

Indica al runtime di disconnettere il profiler.

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parametri

  • dwExpectedCompletionMilliseconds
    [in] Tempo, espresso in millisecondi, che Common Language Runtime (CLR) deve attendere prima di verificare se il profiler può essere scaricato in sicurezza. Per ulteriori informazioni su questo parametro, vedere la sezione Osservazioni e Connessione e disconnessione del profiler.

Valore restituito

Questo metodo restituisce gli HRESULT specifici seguenti nonché gli errori HRESULT che indicano l'esito negativo del metodo.

HRESULT

Oggetto di descrizione

S_OK

La richiesta di disconnessione è valida e ora la procedura di disconnessione sta continuando in un altro thread. Quando la disconnessione è completa viene generato un evento ProfilerDetachSucceeded.

E_ CORPROF_E_CALLBACK3_REQUIRED

Il tentativo del profiler di eseguire il metodo IUnknown::QueryInterface per l'interfaccia ICorProfilerCallback3 ha avuto esito negativo. Il profiler deve implementare questa interfaccia per supportare l'operazione di disconnessione. Non è stato eseguito alcun tentativo di disconnessione.

CORPROF_E_IMMUTABLE_FLAGS_SET

La disconnessione risulta impossibile poiché il profiler ha impostato contrassegni non modificabili all'avvio. Non è stato eseguito alcun tentativo di disconnessione e il profiler è ancora connesso completamente.

CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT

La disconnessione risulta impossibile poiché il profiler ha utilizzato codice Microsoft Intermediate Language (MSIL) instrumentato oppure ha inserito hook enter/leave. Non è stato eseguito alcun tentativo di disconnessione e il profiler è ancora connesso completamente.

Nota   Il codice instrumentato MSIL è codice fornito dal profiler utilizzando il metodo SetILFunctionBody.

CORPROF_E_RUNTIME_UNINITIALIZED

Il runtime non è stato ancora inizializzato nell'applicazione gestita. Ovvero, il runtime non è stato caricato completamente. È possibile che questo codice di errore venga restituito quando la disconnessione viene richiesta nel metodo ICorProfilerCallback::Initialize del callback del profiler.

CORPROF_E_UNSUPPORTED_CALL_SEQUENCE

RequestProfilerDetach è stato chiamato in un momento non supportato. Ciò si verifica se il metodo viene chiamato su un thread gestito ma non dall'interno di un metodo ICorProfilerCallback o dall'interno di un metodo ICorProfilerCallback che non è in grado di tollerare una procedura di Garbage Collection. Per ulteriori informazioni, vedere CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Note

Durante la routine di disconnessione, il thread di disconnessione (ovvero il thread creato in maniera specifica per la disconnessione del profiler) controlla occasionalmente se tutti i thread sono usciti dal codice del profiler. Il profiler deve fornire tramite il parametro dwExpectedCompletionMilliseconds una stima del tempo richiesto affinché ciò si verifichi. Un valore adeguato da utilizzare è la tipica quantità di tempo impiegata dal profiler in qualsiasi dato metodo ICorProfilerCallback*; tale valore non deve essere minore della metà della quantità massima di tempo che il profiler prevede di impiegare.

Il thread di disconnessione utilizza dwExpectedCompletionMilliseconds per decidere quanto tempo restare in sospeso prima di verificare se il codice di callback del profiler è stato estratto da tutti gli stack. Benché nelle versioni successive di CLR i dettagli dell'algoritmo seguente possano cambiare, illustra un modo in cui è possibile utilizzare dwExpectedCompletionMilliseconds quando occorre determinare se il profiler può essere scaricato in sicurezza. Il thread di disconnessione viene prima sospeso per dwExpectedCompletionMilliseconds millisecondi. Se, al termine del periodo di sospensione, CLR trova ancora codice di callback del profiler, il thread di disconnessione viene nuovamente sospeso, questa volta per un numero di millisecondi pari al doppio di dwExpectedCompletionMilliseconds. Se, al termine di questo secondo periodo di sospensione, il thread di disconnessione trova ancora codice di callback del profiler, tale thread viene sospeso per 10 minuti prima di eseguire una nuova verifica. Il thread di disconnessione continua a eseguire verifiche ogni 10 minuti.

Se il profiler specifica 0 (zero) per dwExpectedCompletionMilliseconds, CLR utilizza il valore predefinito pari a 5000, a indicare che eseguirà una verifica dopo 5 secondi, nuovamente dopo 10 secondi e quindi ogni 10 minuti.

Per ulteriori informazioni sulla disconnessione di un profiler, vedere Connessione e disconnessione del profiler

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl, CorProf.h

Libreria: CorGuids.lib

Versioni di .NET Framework: 4

Vedere anche

Riferimenti

Interfaccia ICorProfilerInfo3

Concetti

Connessione e disconnessione del profiler

Altre risorse

Interfacce di profilatura

Profilatura (riferimenti alle API non gestite)