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
Concetti
Connessione e disconnessione del profiler