Condividi tramite


Metodo ICorProfilerInfo3::RequestProfilerDetach

Indica al runtime di disconnettere il profiler.

Sintassi

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parametri

dwExpectedCompletionMilliseconds [in] L'intervallo di tempo, espresso in millisecondi, deve attendere Common Language Runtime (CLR) prima di verificare se è sicuro scaricare il profiler.

Valore restituito

Questo metodo restituisce gli specifici HRESULT seguenti, nonché gli errori di HRESULT che indicano la mancata riuscita del metodo.

HRESULT 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 profiler non è riuscito un tentativo IUnknown::QueryInterface per l'interfaccia ICorProfilerCallback3 , che deve implementare per supportare l'operazione di scollegamento. Non è stato eseguito alcun tentativo di disconnessione.
CORPROF_E_IMMUTABLE_FLAGS_SET La disconnessione risulta impossibile poiché il profiler ha impostato flag non modificabili all'avvio. Non è stato eseguito alcun tentativo di disconnessione e il profiler è ancora connesso completamente.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT Lo scollegamento è impossibile perché il profiler ha usato codice CIL (Common Intermediate Language) instrumentato o hook inseriti enter/leave . Non è stato eseguito alcun tentativo di disconnessione e il profiler è ancora connesso completamente.

Nota Instrumented CIL è codice fornito dal profiler usando il metodo SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED Il runtime non è stato ancora inizializzato nell'applicazione gestita, Ovvero, il runtime non è stato caricato completamente. Questo codice di errore può essere restituito quando viene richiesto lo scollegamento all'interno del metodo ICorProfilerCallback::Initialize 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 può tollerare un'operazione di Garbage Collection. Per altre informazioni, vedere CORPROF_E_UNSUPPORTED_CALL_edizione Standard QUENCE HRESULT.

Osservazioni:

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 necessario perché questo avvenga. Un valore adeguato da usare è 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 usa 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 usare dwExpectedCompletionMilliseconds quando occorre determinare se il profiler può essere scaricato in sicurezza. l thread di disconnessione viene prima sospeso per dwExpectedCompletionMilliseconds millisecondi. Se, dopo il risveglio dalla sospensione, CLR rileva che il codice di callback del profiler è ancora presente, il thread di scollegamento viene nuovamente in sospensione, questa volta per due millisecondi dwExpectedCompletionMilliseconds . Se, al termine di questo secondo periodo di sospensione, il thread di disconnessione trova ancora codice di callback del profiler, 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 usa il valore predefinito pari a 5000, a indicare che eseguirà una verifica dopo 5 secondi, nuovamente dopo 10 secondi e quindi ogni 10 minuti.

Requisiti

Piattaforme: vedere Requisiti di sistema.

Intestazione: CorProf.idl, CorProf.h

Libreria: CorGuids.lib

Versioni di .NET Framework: disponibili dalla versione 4

Vedi anche