Configurazione di un ambiente di profilaturaSetting Up a Profiling Environment

Nota

Sono state apportate modifiche sostanziali alla profilatura in .NET Framework 4.NET Framework 4.There have been substantial changes to profiling in the .NET Framework 4.NET Framework 4.

Quando viene avviato un processo gestito (applicazione o servizio), viene caricato Common Language Runtime (CLR).When a managed process (application or service) starts, it loads the common language runtime (CLR). Quando CLR viene inizializzato, valuta le due variabili di ambiente seguenti per decidere se è necessario connettere il processo a un profiler:When the CLR is initialized, it evaluates the following two environmental variables to decide whether the process should connect to a profiler:

  • COR_ENABLE_PROFILING: CLR si connette a un profiler solo se questa variabile di ambiente esiste ed è impostata su 1.COR_ENABLE_PROFILING: The CLR connects to a profiler only if this environment variable exists and is set to 1.

  • COR_PROFILER: se si passa il controllo COR_ENABLE_PROFILING, CLR si connette al profiler con questo CLSID o ProgID, che deve essere stato archiviato in precedenza nel Registro di sistema.COR_PROFILER: If the COR_ENABLE_PROFILING check passes, the CLR connects to the profiler that has this CLSID or ProgID, which must have been stored previously in the registry. La variabile di ambiente COR_PROFILER viene definita come stringa, come mostrato nei due esempi seguenti.The COR_PROFILER environment variable is defined as a string, as shown in the following two examples.

    set COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}  
    set COR_PROFILER="MyProfiler"  
    

Per profilare un'applicazione CLR, è necessario impostare le variabili di ambiente COR_ENABLE_PROFILING e COR_PROFILER prima di eseguire l'applicazione.To profile a CLR application, you must set the COR_ENABLE_PROFILING and COR_PROFILER environment variables before you run the application. È anche necessario assicurarsi che il file DLL del profiler sia registrato.You must also make sure that the profiler DLL is registered.

Nota

A partire da .NET Framework 4.NET Framework 4, i profiler non devono essere registrati.Starting with the .NET Framework 4.NET Framework 4, profilers do not have to be registered.

Nota

Per usare i profiler di .NET Framework versioni 2.0, 3.0 e 3.5 nel .NET Framework 4.NET Framework 4 e versioni successive, è necessario impostare la variabile di ambiente COMPLUS_ProfAPI_ProfilerCompatibilitySetting.To use .NET Framework versions 2.0, 3.0, and 3.5 profilers in the .NET Framework 4.NET Framework 4 and later versions, you must set the COMPLUS_ProfAPI_ProfilerCompatibilitySetting environment variable.

Ambito della variabile di ambienteEnvironment Variable Scope

La modalità di impostazione delle variabili di ambiente COR_ENABLE_PROFILING e COR_PROFILER ne determina l'ambito di influenza.How you set the COR_ENABLE_PROFILING and COR_PROFILER environment variables will determine their scope of influence. È possibile impostare queste variabili in uno dei modi seguenti:You can set these variables in one of the following ways:

  • Se si impostano le variabili in un ICorDebug:: CreateProcess chiamata, verranno applicate solo all'applicazione in esecuzione al momento.If you set the variables in an ICorDebug::CreateProcess call, they will apply only to the application that you are running at the time. Si applicheranno anche ad altre applicazioni avviate dall'applicazione che eredita l'ambiente.(They will also apply to other applications started by that application that inherit the environment.)

  • Se si impostano le variabili in una finestra del prompt dei comandi, verranno applicate a tutte le applicazioni avviate da questa finestra.If you set the variables in a Command Prompt window, they will apply to all applications that are started from that window.

  • Se le variabili vengono impostate a livello di utente, verranno applicate a tutte le applicazioni avviate con Esplora file.If you set the variables at the user level, they will apply to all applications that you start with File Explorer. Una finestra del prompt dei comandi aperta dopo aver impostato le variabili avrà queste impostazioni di ambiente, così come tutte le applicazioni avviate da tale finestra.A Command Prompt window that you open after you set the variables will have these environment settings, and so will any application that you start from that window. Per impostare le variabili di ambiente a livello di utente, fare doppio clic su risorse del Computer, fare clic su proprietà, fare clic su di avanzate scheda, fare clic su ambiente Le variabilie aggiungere le variabili per il variabili utente elenco.To set environment variables at the user level, right-click My Computer, click Properties, click the Advanced tab, click Environment Variables, and add the variables to the User variables list.

  • Se si impostano le variabili a livello di computer, verranno applicate a tutte le applicazioni avviate su tale computer.If you set the variables at the computer level, they will apply to all applications that are started on that computer. Una finestra del prompt dei comandi aperta nel computer avrà le impostazioni di ambiente specificate, così come tutte le applicazioni avviate da tale finestra.A Command Prompt window that you open on that computer will have these environment settings, and so will any application that you start from that window. Ciò significa che ogni processo gestito nel computer verrà avviato con il profiler.This means that every managed process on that computer will start with your profiler. Per impostare le variabili di ambiente a livello di computer, fare doppio clic su risorse del Computer, fare clic su proprietà, fare clic su di avanzate scheda, fare clic su ambiente Le variabili, aggiungere le variabili per il le variabili di sistema elenco e quindi riavviare il computer.To set environment variables at the computer level, right-click My Computer, click Properties, click the Advanced tab, click Environment Variables, add the variables to the System variables list, and then restart your computer. Dopo il riavvio le variabili saranno disponibili in tutto il sistema.After restarting, the variables will be available system-wide.

Se si esegue la profilatura di un servizio di Windows è necessario riavviare il computer dopo aver impostato le variabili di ambiente e registrare la DLL del profiler.If you are profiling a Windows Service, you must restart your computer after you set the environment variables and register the profiler DLL. Per ulteriori informazioni su queste considerazioni, vedere la sezione analisi di un servizio Windows.For more information about these considerations, see the section Profiling a Windows Service.

Considerazioni aggiuntiveAdditional Considerations

  • La classe del profiler implementa il ICorProfilerCallback e ICorProfilerCallback2 interfacce.The profiler class implements the ICorProfilerCallback and ICorProfilerCallback2 interfaces. In .NET Framework versione 2.0, un profiler deve implementare ICorProfilerCallback2.In the .NET Framework version 2.0, a profiler must implement ICorProfilerCallback2. In caso contrario, ICorProfilerCallback2 non verrà caricato.If it does not, ICorProfilerCallback2 will not be loaded.

  • Un processo può essere profilato da un solo profiler in momento e in un ambiente specifici.Only one profiler can profile a process at one time in a given environment. È possibile registrare due profiler diversi in ambienti diversi, ma ognuno deve profilare processi separati.You can register two different profilers in different environments, but each must profile separate processes. Il profiler deve essere implementato come file DLL del server COM in-process, mappato allo stesso spazio degli indirizzi del processo che si sta profilando.The profiler must be implemented as an in-process COM server DLL, which is mapped into the same address space as the process that is being profiled. Ciò significa che il profiler viene eseguito in-process.This means that the profiler runs in-process. .NET Framework non supporta altri tipi di server COM.The .NET Framework does not support any other type of COM server. Ad esempio, per monitorare le applicazioni da un computer remoto, il profiler deve implementare agenti di raccolta in ogni computer.For example, if a profiler wants to monitor applications from a remote computer, it must implement collector agents on each computer. Questi agenti raccolgono i risultati e li comunicano al computer di raccolta dati centrale.These agents will batch results and communicate them to the central data collection computer.

  • Poiché il profiler è un oggetto COM di cui viene creata un'istanza in-process, ogni applicazione profilata disporrà della propria copia del profiler.Because the profiler is a COM object that is instantiated in-process, each profiled application will have its own copy of the profiler. Pertanto, una singola istanza del profiler non deve gestire i dati da più applicazioni.Therefore, a single profiler instance does not have to handle data from multiple applications. Tuttavia, sarà necessario aggiungere una logica al codice di registrazione del profiler per impedire che il file di log sia sovrascritto da altre applicazioni profilate.However, you will have to add logic to the profiler's logging code to prevent log file overwrites from other profiled applications.

Inizializzazione del profilerInitializing the Profiler

Quando vengono superati entrambi i controlli delle variabili di ambiente, CLR crea un'istanza del profiler in modo simile alla funzione COM CoCreateInstance.When both environment variable checks pass, the CLR creates an instance of the profiler in a similar manner to the COM CoCreateInstance function. Il profiler non viene caricato tramite una chiamata diretta a CoCreateInstance.The profiler is not loaded through a direct call to CoCreateInstance. Di conseguenza si evita la chiamata a CoInitialize, che richiede l'impostazione del modello di threading.Therefore, a call to CoInitialize, which requires setting the threading model, is avoided. CLR chiama quindi il ICorProfilerCallback:: Initialize metodo nel profiler.The CLR then calls the ICorProfilerCallback::Initialize method in the profiler. La firma di questo metodo è la seguente.The signature of this method is as follows.

HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)  

Il profiler deve eseguire la query pICorProfilerInfoUnk per un ICorProfilerInfo o ICorProfilerInfo2 puntatore a interfaccia e salvarlo in modo da poter richiedere altre informazioni successivamente durante la profilatura.The profiler must query pICorProfilerInfoUnk for an ICorProfilerInfo or ICorProfilerInfo2 interface pointer and save it so that it can request more information later during profiling.

Impostazione delle notifiche degli eventiSetting Event Notifications

Il profiler chiama quindi il ICorProfilerInfo:: SetEventMask per specificare quali categorie di notifiche è interessato.The profiler then calls the ICorProfilerInfo::SetEventMask method to specify which categories of notifications it is interested in. Ad esempio, se il profiler è interessato solo alle notifiche di entrata e uscita dalla funzione e alle notifiche di Garbage Collection, viene specificato quanto segue.For example, if the profiler is interested only in function enter and leave notifications and garbage collection notifications, it specifies the following.

ICorProfilerInfo* pInfo;  
pICorProfilerInfoUnk->QueryInterface(IID_ICorProfilerInfo, (void**)&pInfo);  
pInfo->SetEventMask(COR_PRF_MONITOR_ENTERLEAVE | COR_PRF_MONITOR_GC)  

Impostando la maschera delle notifiche in questo modo, il profiler può limitare le notifiche ricevute.By setting the notifications mask in this manner, the profiler can limit which notifications it receives. Questo approccio consente di compilare un profiler semplice o per scopi specifici.This approach helps the user build a simple or special-purpose profiler. Riduce anche il tempo di CPU che andrebbe sprecato per l'invio di notifiche del tutto ignorate dal profiler.It also reduces CPU time that would be wasted sending notifications that the profiler would just ignore.

Alcuni eventi del profiler non sono modificabili.Certain profiler events are immutable. Ciò significa che, non appena si impostano questi eventi nel callback ICorProfilerCallback::Initialize, non è possibile disattivarli, né attivare nuovi eventi.This means that as soon as these events are set in the ICorProfilerCallback::Initialize callback, they cannot be turned off and new events cannot be turned on. Se si tenta di modificare un evento non modificabile, ICorProfilerInfo::SetEventMask restituisce un HRESULT di errore.Attempts to change an immutable event will result in ICorProfilerInfo::SetEventMask returning a failed HRESULT.

Profilatura di un servizio WindowsProfiling a Windows Service

La profilatura di un servizio Windows è analoga a quella di un'applicazione Common Language Runtime.Profiling a Windows Service is like profiling a common language runtime application. Entrambe le operazioni di profilatura vengono abilitate con le variabili di ambiente.Both profiling operations are enabled through environment variables. Poiché un servizio Windows viene avviato all'avvio del sistema operativo, le variabili di ambiente descritte in precedenza in questo argomento devono essere già presenti e impostate sui valori richiesti.Because a Windows Service is started when the operating system starts, the environment variables discussed previously in this topic must already be present and set to the required values before the system starts. Inoltre, la DLL di profilatura deve già essere registrata nel sistema.In addition, the profiling DLL must already be registered on the system.

Dopo aver impostato le variabili di ambiente COR_ENABLE_PROFILING e COR_PROFILER e aver registrato il file DLL del profiler, è necessario riavviare il computer di destinazione in modo che il servizio Windows possa rilevare le modifiche.After you set the COR_ENABLE_PROFILING and COR_PROFILER environment variables and register the profiler DLL, you should restart the target computer so that the Windows Service can detect those changes.

Queste modifiche abiliteranno la profilatura a livello di sistema.Note that these changes will enable profiling on a system-wide basis. Per evitare la profilatura di tutte le applicazioni gestite eseguite successivamente, è necessario eliminare le variabili di ambiente del sistema dopo aver riavviato il computer di destinazione.To prevent every managed application that subsequently runs from being profiled, you should delete the system environment variables after you restart the target computer.

Questa tecnica comporta anche la profilatura di tutti i processi CLR.This technique also leads to every CLR process getting profiled. Il profiler deve aggiungere logica al relativo ICorProfilerCallback:: Initialize callback per rilevare se il processo corrente è di particolare interesse.The profiler should add logic to its ICorProfilerCallback::Initialize callback to detect whether the current process is of interest. Se non lo è, il profiler può interrompere il callback senza eseguire l'inizializzazione.If it is not, the profiler can fail the callback without performing the initialization.

Vedere ancheSee Also

Panoramica della profilaturaProfiling Overview