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