Podgląd zdarzeń

W profilerze wydajności można zbierać informacje diagnostyczne, gdy aplikacja jest uruchomiona, a następnie zbadać zebrane informacje po zatrzymaniu aplikacji jak analiza pośmiertna.

Podgląd zdarzeń ogólnych pokazuje działanie aplikacji za pośrednictwem listy zdarzeń, takich jak ładowanie modułu, uruchamianie wątku i konfiguracja systemu. Ten widok ułatwia lepsze diagnozowanie sposobu działania aplikacji w profilerze programu Visual Studio.

Konfiguracja

  1. Wybierz pozycję Alt+F2 , aby otworzyć profilera wydajności w programie Visual Studio.

  2. Zaznacz pole wyboru Podgląd zdarzeń.

    The Events Viewer check box selected

  3. Wybierz przycisk Start, aby uruchomić narzędzie.

  4. Po uruchomieniu narzędzia przejdź przez scenariusz do profilowania w aplikacji. Następnie wybierz pozycję Zatrzymaj zbieranie lub zamknij aplikację, aby wyświetlić dane.

    A window showing Stop collection

Aby uzyskać więcej informacji na temat zwiększenia wydajności narzędzia, zobacz Optymalizowanie ustawień profilowania.

Poznaj swoje dane

An event viewer trace

Nazwa kolumny opis
Nazwa dostawcy Źródło zdarzenia
Nazwa zdarzenia Zdarzenie określone przez dostawcę
Text Opisy dostawcy, nazwy zdarzenia i identyfikatora zdarzenia dla zdarzenia
Sygnatura czasowa (ms) Kiedy miało miejsce zdarzenie
Identyfikator GUID dostawcy Identyfikator dostawcy zdarzeń
Identyfikator zdarzenia Identyfikator zdarzenia
Process ID Proces, z którego wystąpiło zdarzenie (jeśli jest znane)
Nazwa procesu Nazwa procesu, jeśli jest aktywnie uruchomiona
Identyfikator wątku Identyfikator wątku, z którego wystąpiło zdarzenie (jeśli jest znane)

Jeśli domyślnie brakuje dowolnej kolumny, kliknij prawym przyciskiem myszy jeden z istniejących nagłówków kolumn i wybierz kolumnę, którą chcesz dodać.

Adding columns to the event viewer

Po wybraniu zdarzenia zostanie wyświetlone okno Dodatkowe właściwości . Typowe właściwości zawierają listę właściwości, które będą wyświetlane dla dowolnego zdarzenia. Właściwości ładunku zawierają właściwości specyficzne dla zdarzenia. W przypadku niektórych zdarzeń można również wyświetlić stosy.

The event viewer showing stacks

Organizowanie danych

Wszystkie kolumny z wyjątkiem kolumny Tekst można sortować.

The event viewer trace

Podgląd zdarzeń wyświetla maksymalnie 20 000 zdarzeń jednocześnie. Aby skoncentrować się na interesujących zdarzeniach, możesz filtrować wyświetlanie zdarzeń, wybierając filtr Zdarzenia. Możesz również zobaczyć, jaki procent całkowitej liczby zdarzeń wystąpił dla każdego dostawcy, a te informacje zawierają podział czasu, w którym jest spędzany czas. Umieść kursor na jednym filtrze zdarzeń, aby wyświetlić etykietkę narzędzia, która pokazuje:

  • Nazwa zdarzenia
  • Dostawca
  • Identyfikator GUID
  • Procent całkowitych zdarzeń
  • Liczba zdarzeń

The event viewer event filter

Filtr dostawcy pokazuje, jaki procent całkowitej liczby zdarzeń wystąpił dla każdego dostawcy. Zatrzymaj wskaźnik myszy na pojedynczym dostawcy, aby wyświetlić podobną etykietkę narzędzia z nazwą dostawcy, procentem łącznej liczby zdarzeń i liczbą zdarzeń.

The event viewer provider filter

Włączanie niestandardowych zdarzeń ETW

Możesz instrumentować kod za pomocą niestandardowych zdarzeń ETW i umożliwić im wyświetlanie w Podglądzie zdarzeń. Aby włączyć zdarzenia niestandardowe:

  1. Skompiluj niestandardowy kod zdarzenia.

    Na końcu tej sekcji znajduje się przykład kodu zdarzeń niestandardowych języka C++.

  2. Otwórz profiler wydajności (Alt + F2), włącz Podgląd zdarzeń, a następnie wybierz ikonę Ustawienia (ikona koła zębatego) obok niego.

    Screenshot of the events viewer settings icon.

  3. W oknie dialogowym włącz pierwszy wiersz w obszarze Dodatkowi dostawcy, a następnie wykonaj jedną z następujących akcji:

    • W przypadku natywnego niestandardowego kodu zdarzenia ustaw identyfikator GUID dostawcy na podstawie identyfikatora GUID niestandardowego kodu zdarzenia, a wartość Nazwa dostawcy pozostaw pustą lub użyj jej wartości domyślnej.

    • W przypadku niestandardowego kodu zdarzenia w języku C# ustaw tę samą wartość nazwy dostawcy, która została użyta podczas deklarowania kodu zdarzenia. Ta nazwa jest konwertowana na identyfikator GUID w tle, dlatego pozostaw pusty identyfikator GUID dostawcy.

      W przypadku natywnego zdarzenia niestandardowego wiersz powinien wyglądać podobnie do poniższej ilustracji.

      Screenshot of the events viewer settings.

  4. Wybierz przycisk OK.

    Zdarzenie niestandardowe jest wyświetlane w Podglądzie zdarzeń po zebraniu śladu diagnostyki i otwarciu go. Poniższa ilustracja przedstawia zdarzenia niestandardowe w Podglądzie zdarzeń z ustawionym filtrowaniem w celu wyświetlenia tylko zdarzenia niestandardowego.

    Screenshot of the events viewer showing custom events.

Oto przykład niestandardowego kodu zdarzenia dla języka 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;
}