Metodo ICorProfilerInfo3::RequestProfilerDetachICorProfilerInfo3::RequestProfilerDetach Method

Indica al runtime di disconnettere il profiler.Instructs the runtime to detach the profiler.

SintassiSyntax

HRESULT RequestProfilerDetach(  
   [in] DWORD    dwExpectedCompletionMilliseconds);  

ParametriParameters

dwExpectedCompletionMilliseconds
[in] Tempo, espresso in millisecondi, che Common Language Runtime (CLR) deve attendere prima di verificare se il profiler può essere scaricato in sicurezza.[in] The length of time, in milliseconds, the common language runtime (CLR) should wait before checking to see whether it is safe to unload the profiler.

Valore restituitoReturn Value

Questo metodo restituisce gli specifici HRESULT seguenti, nonché gli errori di HRESULT che indicano la mancata riuscita del metodo.This method returns the following specific HRESULTs as well as HRESULT errors that indicate method failure.

HRESULTHRESULT DescrizioneDescription
S_OKS_OK La richiesta di disconnessione è valida e ora la procedura di disconnessione sta continuando in un altro thread.The detach request is valid, and the detach procedure is now continuing on another thread. Quando la disconnessione è completa viene generato un evento ProfilerDetachSucceeded.When the detach is fully complete, a ProfilerDetachSucceeded event is issued.
E_ CORPROF_E_CALLBACK3_REQUIREDE_ CORPROF_E_CALLBACK3_REQUIRED Il profiler di eseguire un IUnknown:: QueryInterface tentativo per il ICorProfilerCallback3 interfaccia, è necessario implementare per supportare l'operazione di scollegamento.The profiler failed an IUnknown::QueryInterface attempt for the ICorProfilerCallback3 interface, which it must implement to support the detach operation. Non è stato eseguito alcun tentativo di disconnessione.Detach was not attempted.
CORPROF_E_IMMUTABLE_FLAGS_SETCORPROF_E_IMMUTABLE_FLAGS_SET La disconnessione risulta impossibile poiché il profiler ha impostato flag non modificabili all'avvio.Detachment is impossible because the profiler set immutable flags at startup. Non è stato eseguito alcun tentativo di disconnessione e il profiler è ancora connesso completamente.Detachment was not attempted; the profiler is still fully attached.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENTCORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT La disconnessione risulta impossibile poiché il profiler ha usato instrumentato codice Microsoft intermediate language (MSIL) o inserite enter / leave hook.Detachment is impossible because the profiler used instrumented Microsoft intermediate language (MSIL) code, or inserted enter/leave hooks. Non è stato eseguito alcun tentativo di disconnessione e il profiler è ancora connesso completamente.Detachment was not attempted; the profiler is still fully attached.

Nota instrumentato MSIL è codice fornito dal profiler usando il SetILFunctionBody metodo.Note Instrumented MSIL is code is code that is provided by the profiler using the SetILFunctionBody method.
CORPROF_E_RUNTIME_UNINITIALIZEDCORPROF_E_RUNTIME_UNINITIALIZED Il runtime non è stato ancora inizializzato nell'applicazione gestita,The runtime has not been initialized yet in the managed application. ovvero non è stato caricato completamente. Questo codice di errore può essere restituito quando la disconnessione è richiesto all'interno del callback del profiler ICorProfilerCallback:: Initialize metodo.(That is, the runtime has not been fully loaded.) This error code may be returned when detachment is requested inside the profiler callback's ICorProfilerCallback::Initialize method.
CORPROF_E_UNSUPPORTED_CALL_SEQUENCECORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach è stato chiamato in un momento non supportato.RequestProfilerDetach was called at an unsupported time. Questo errore si verifica se il metodo viene chiamato su un thread gestito ma non dall'interno un ICorProfilerCallback metodo o in un ICorProfilerCallback metodo che non è in grado di tollerare una procedura di garbage collection.This occurs if the method is called on a managed thread but not from within an ICorProfilerCallback method or from within an ICorProfilerCallback method that cannot tolerate a garbage collection. Per ulteriori informazioni, vedere CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.For more information, see CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

NoteRemarks

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.During the detach procedure, the detach thread (the thread created specifically for detaching the profiler) occasionally checks whether all threads have exited the profiler’s code. Il profiler deve fornire tramite il parametro dwExpectedCompletionMilliseconds una stima del tempo necessario perché questo avvenga.The profiler should provide an estimate of how long this should take through the dwExpectedCompletionMilliseconds parameter. 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.A good value to use is the typical amount of time the profiler spends inside any given ICorProfilerCallback* method; this value should not be less than half of the maximum amount of time the profiler expects to spend.

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.The detach thread uses dwExpectedCompletionMilliseconds to decide how long to sleep before checking whether profiler callback code has been popped off all stacks. 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.Although the details of the following algorithm may change in future releases of the CLR, it illustrates one way dwExpectedCompletionMilliseconds can be used when determining when it is safe to unload the profiler. l thread di disconnessione viene prima sospeso per dwExpectedCompletionMilliseconds millisecondi.The detach thread first sleeps for dwExpectedCompletionMilliseconds milliseconds. Se, al termine del periodo di sospensione, CLR rileva che il codice di callback del profiler è ancora presente, il thread di disconnessione viene nuovamente sospeso, questa volta per due volte dwExpectedCompletionMilliseconds millisecondi.If, after awakening from the sleep, the CLR finds that profiler callback code is still present, the detach thread sleeps again, this time for two times dwExpectedCompletionMilliseconds milliseconds. 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.If, after awakening from this second sleep, the detach thread finds that profiler callback code is still present, it sleeps for 10 minutes before checking again. Il thread di disconnessione continua a eseguire verifiche ogni 10 minuti.The detach thread continues to recheck every 10 minutes.

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.If the profiler specifies dwExpectedCompletionMilliseconds as 0 (zero), the CLR uses a default value of 5000, which means that it will perform a check after 5 seconds, again after 10 seconds, and then every 10 minutes thereafter.

RequisitiRequirements

Piattaforme: vedere requisiti di sistema.Platforms: See System Requirements.

Intestazione: CorProf.idl, CorProf.hHeader: CorProf.idl, CorProf.h

Libreria: CorGuids. libLibrary: CorGuids.lib

Versioni di .NET framework: Disponibile dalla 4Available since 4.NET Framework Versions: Disponibile dalla 4Available since 4

Vedere ancheSee Also

Interfaccia ICorProfilerInfo3ICorProfilerInfo3 Interface
Interfacce di profilaturaProfiling Interfaces
ProfilaturaProfiling