Visualizzatore eventi
In Performance Profiler puoi raccogliere informazioni di diagnostica durante l'esecuzione dell'app e quindi esaminare le informazioni raccolte dopo l'arresto dell'app, ad esempio un'analisi post-mortem.
Il visualizzatore eventi generici mostra l'attività dell'app tramite un elenco di eventi come il caricamento del modulo, l'avvio del thread e la configurazione di sistema. Questa visualizzazione consente di diagnosticare meglio le prestazioni dell'app all'interno del profiler di Visual Studio.
Attrezzaggio
Selezionare ALT+F2 per aprire Il profiler prestazioni in Visual Studio.
Selezionare la casella di controllo Visualizzatore eventi.
Selezionare il pulsante Start per eseguire lo strumento.
Dopo l'avvio dell'esecuzione dello strumento, esaminare lo scenario da profilare nell'app. Selezionare quindi Interrompi raccolta o chiudi l'app per visualizzare i dati.
Per altre informazioni su come rendere lo strumento più efficiente, vedere Ottimizzazione delle impostazioni di profilatura.
Informazioni sui dati
Nome colonna | Descrizione |
---|---|
Nome provider | Origine evento |
Nome evento | Evento specificato dal provider |
Testo | Descrizioni del provider, del nome dell'evento e dell'ID per l'evento |
Timestamp (ms) | Quando si è verificato l'evento |
Provider Guid | ID del provider di eventi |
ID evento | ID dell'evento |
Process ID | Processo da cui si è verificato l'evento (se noto) |
Nome processo | Nome del processo se è in esecuzione attivamente |
ID thread | ID del thread da cui si è verificato l'evento (se noto) |
Se per impostazione predefinita manca una colonna, fare clic con il pulsante destro del mouse su una delle intestazioni di colonna esistenti e selezionare la colonna da aggiungere.
Quando si seleziona un evento, viene visualizzata la finestra Proprietà aggiuntive. Proprietà comuni mostra l'elenco delle proprietà che verranno visualizzate per qualsiasi evento. Le proprietà del payload mostrano proprietà specifiche dell'evento. Per alcuni eventi, è anche possibile visualizzare Stack.
Organizzare i dati
Tutte le colonne, ad eccezione della colonna Text , sono ordinabili.
Il visualizzatore eventi visualizza fino a 20.000 eventi alla volta. Per concentrarsi sugli eventi di interesse, è possibile filtrare la visualizzazione degli eventi selezionando il filtro Evento. È anche possibile visualizzare la percentuale del numero totale di eventi che si sono verificati per ogni provider e queste informazioni offrono una suddivisione del tempo trascorso. Passare il puntatore del mouse su un singolo filtro eventi per visualizzare una descrizione comando che mostra:
- Nome evento
- Provider
- GUID
- Percentuale di eventi totali
- Conteggio eventi
Il filtro del provider mostra la percentuale del numero totale di eventi che si sono verificati per ogni provider. Passare il puntatore del mouse su un singolo provider per visualizzare una descrizione comando simile con il nome del provider, la percentuale di eventi totali e il numero di eventi.
Abilitare eventi ETW personalizzati
È possibile instrumentare il codice con eventi ETW personalizzati e abilitarli per la visualizzazione nel Visualizzatore eventi. Per abilitare eventi personalizzati:
Compilare il codice evento personalizzato.
Alla fine di questa sezione viene fornito un esempio di codice evento personalizzato C++.
Aprire il Profiler prestazioni (ALT + F2), abilitare il Visualizzatore eventi e quindi selezionare l'icona Impostazioni (icona a forma di ingranaggio) accanto.
Nella finestra di dialogo abilitare la prima riga in Provider aggiuntivi e quindi eseguire una delle azioni seguenti:
Per il codice dell'evento personalizzato nativo, impostare il GUID del provider in base al GUID per il codice evento personalizzato e lasciare vuoto il valore di Nome provider o usarne il valore predefinito.
Per il codice evento personalizzato C#, impostare lo stesso valore di Nome provider usato per dichiarare il codice dell'evento. Questo nome viene convertito in un GUID in background, quindi lasciare vuoto il GUID del provider.
Per un evento personalizzato nativo, la riga dovrebbe essere simile alla figura seguente.
Seleziona OK.
L'evento personalizzato viene visualizzato nel Visualizzatore eventi quando si raccoglie una traccia di diagnostica e la si apre. La figura seguente mostra gli eventi personalizzati nel Visualizzatore eventi con filtro impostato per visualizzare solo l'evento personalizzato.
Ecco un esempio di codice evento personalizzato per C++.
#include <Windows.h>
#include <evntprov.h>
#include <iostream>
#include <thread>
// This GUID must be regenerated so it is unique for your provider
// {7369B7AC-64EB-4618-B6B6-C8442B12E8F2}
GUID customEventProvider = { 0x7369b7ac, 0x64eb, 0x4618, { 0xb6, 0xb6, 0xc8, 0x44, 0x2b, 0x12, 0xe8, 0xf2 } };
REGHANDLE _customEventProviderRegHandle = 0;
// Id, Version, Channel, Level, OpCode, Task, Keyword
const EVENT_DESCRIPTOR CustomEventDescriptor = { 1, 0, 0, 0, 0, 0, 1 };
int main()
{
// Register the provider
ULONG res = ::EventRegister(&customEventProvider, nullptr, nullptr, &_customEventProviderRegHandle);
if (res != ERROR_SUCCESS)
{
return res;
}
byte data[] = { 0xFF, 0xFF, 0xFF, 0xFF };
EVENT_DATA_DESCRIPTOR eventData[1];
::EventDataDescCreate(&(eventData[0]), &data, sizeof(data));
for (int i = 0; i < 10; ++i)
{
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
::EventWrite(_customEventProviderRegHandle, &CustomEventDescriptor, _countof(eventData), eventData);
std::cout << "Wrote event\n";
}
res = ::EventUnregister(_customEventProviderRegHandle);
if (res != ERROR_SUCCESS)
{
return res;
}
return 0;
}