Freigeben über


Zugreifen auf Ablaufverfolgungsdaten

.NET TraceProcessing ist über NuGet mit der folgenden Paket-ID verfügbar:

Microsoft.Windows.EventTracing.Processing.All

Mit diesem Paket können Sie auf Daten in einer Ablaufverfolgungsdatei zugreifen. Wenn Sie noch keine Ablaufverfolgungsdatei besitzen, können Sie Windows Performance Recorder verwenden, um eine zu erstellen.

Die folgende Beispielkonsolen-App zeigt, wie Sie auf die Befehlszeilen aller Prozesse zugreifen, die in der Ablaufverfolgung enthalten sind:

using Microsoft.Windows.EventTracing;
using Microsoft.Windows.EventTracing.Processes;
using System;

class Program
{
    static void Main(string[] args)
    {
        if (args.Length != 1)
        {
            Console.Error.WriteLine("Usage: <trace.etl>");
            return;
        }

        using (ITraceProcessor trace = TraceProcessor.Create(args[0]))
        {
            IPendingResult<IProcessDataSource> pendingProcessData = trace.UseProcesses();

            trace.Process();

            IProcessDataSource processData = pendingProcessData.Result;

            foreach (IProcess process in processData.Processes)
            {
                Console.WriteLine(process.CommandLine);
            }
        }
    }
}

Verwenden von TraceProcessor

Rufen Sie TraceProcessor.Create auf, um eine Ablaufverfolgung zu verarbeiten. Die Kernschnittstelle ist ITraceProcessor, und die Verwendung dieser Schnittstelle umfasst das folgende Muster:

  1. Teilen Sie dem Prozessor zunächst mit, welche Daten Sie aus einer Ablaufverfolgung verwenden möchten.
  2. Als zweiten Schritt verarbeiten Sie die Ablaufverfolgung.
  3. Und schließlich greifen Sie auf die Ergebnisse zu.

Wenn Sie dem Prozessor im Voraus mitteilen, welche Arten von Daten Sie benötigen, müssen Sie keine Zeit damit verbringen, große Mengen aller möglichen Arten von Ablaufverfolgungsdaten zu verarbeiten. Stattdessen übernimmt TraceProcessor einfach die Arbeit, die erforderlich ist, um die spezifischen Arten von Daten, die Sie anfordern, zur Verfügung zu stellen.

Es gibt einige Projekteinstellungen, die wir für die Verwendung von TraceProcessor empfehlen:

  1. Wir empfehlen, EXE-Dateien im 64-Bit-Format auszuführen.

    Die Visual Studio-Standardeinstellung für eine neue C#-.NET Framework-Konsolenanwendung ist „Beliebige CPU“ mit aktivierter Option „32-Bit bevorzugen“. Der Standardwert für .NET verfügt möglicherweise bereits über die empfohlene Einstellung.

    Die Verarbeitung von Ablaufverfolgungen kann speicherintensiv sein, insbesondere bei größeren Ablaufverfolgungen. Es wird daher empfohlen, das Plattformziel in EXE-Dateien, die TraceProcessor verwenden, in x64 zu ändern (oder die Option „32-Bit bevorzugen“ zu deaktivieren). Informationen zum Ändern dieser Einstellungen finden Sie auf der Registerkarte „Erstellen“ unter „Eigenschaften“ für das Projekt. Um diese Einstellungen für alle Konfigurationen zu ändern, stellen Sie sicher, dass die Dropdownliste „Konfiguration“ auf „Alle Konfigurationen“ und nicht nur auf die Standardeinstellung der aktuellen Konfiguration festgelegt ist.

  2. Wir empfehlen, NuGet mit dem neueren PackageReference-Modus anstelle des älteren packages.config-Modus zu verwenden.

    Informationen zum Ändern der Standardeinstellung für neue Projekte finden Sie unter Tools, NuGet-Paket-Manager, Paket-Manager-Einstellungen, Paketverwaltung, Standardformat für Paketverwaltung.

Integrierte Datenquellen

Eine ETL-Datei kann viele Arten von Daten in einer Ablaufverfolgung erfassen. Beachten Sie, dass die in einer ETL-Datei enthaltenen Daten davon abhängig sind, welche Anbieter beim Erfassen der Ablaufverfolgung aktiviert waren. In der folgenden Liste sind die Arten von Ablaufverfolgungsdaten aufgeführt, die von TraceProcessor verfügbar sind:

Code Beschreibung Verwandte WPA-Elemente
trace.UseClassicEvents() Stellt klassische ETW-Ereignisse aus einer Ablaufverfolgung ohne Schemainformationen zur Verfügung. Tabelle „Generische Ereignisse“ (wenn der Ereignistyp „klassisch“ oder „WPP“ ist)
trace.UseConnectedStandbyData() Stellt Daten aus einer Ablaufverfolgung über den Wechsel des Systems in und aus dem verbundenen Standbymodus bereit. Tabelle „CS-Zusammenfassung“
trace.UseCpuIdleStates() Stellt Daten aus einer Ablaufverfolgung zu CPU-C-Zuständen bereit. Tabelle „CPU-Leerlaufzustände“ (wenn der Typ „Tatsächlich“ ist)
trace.UseCpuSamplingData() Stellt Daten aus einer Ablaufverfolgung zur CPU-Auslastung basierend auf der regelmäßigen Stichprobenentnahme des Anweisungszeigers zur Verfügung. Tabelle „CPU-Auslastung (aus Stichproben)“
trace.UseCpuSchedulingData() Stellt Daten aus einer Ablaufverfolgung zur CPU-Threadplanung bereit, einschließlich Kontextwechseln und „Thread bereit“-Ereignissen. Tabelle „CPU-Auslastung (präzise)“
trace.UseDevicePowerData() Stellt Daten aus einer Ablaufverfolgung zu Geräte-D-Zuständen bereit. Tabelle „DState“ von Geräten
trace.UseDirectXData() Stellt Daten aus einer Ablaufverfolgung zur DirectX-Aktivität bereit. Tabelle „GPU-Auslastung“
traceUseDiskIOData() Stellt Daten aus einer Ablaufverfolgung zur Datenträger-E/A-Aktivität bereit. Tabelle „Datenträgerauslastung“
trace.UseEnergyEstimationData() Stellt Daten aus einer Ablaufverfolgung über den geschätzten Energieverbrauch pro Prozess von der Energy Estimation Engine (Energieabschätzungs-Engine) bereit. Tabelle „Energy Estimation Engine Summary (by Process)“ (Energieabschätzungs-Engine-Zusammenfassung (nach Prozess))
trace.UseEnergyMeterData() Stellt Daten aus einer Ablaufverfolgung zum gemessenen Energieverbrauch aus der Energy Meter Interface (Energiemess-Schnittstelle, EMI) bereit. Tabelle „Energy Estimation Engine (by Emi)“ (Energieabschätzungs-Engine (nach Emi))
trace.UseFileIOData() Stellt Daten aus einer Ablaufverfolgung zur Datei-E/A-Aktivität bereit. Tabelle „Datei-E/A“
trace.UseGenericEvents() Stellt „Manifested“ (aufgetretene) und „TraceLogging“-Ereignisse aus einer Ablaufverfolgung bereit. Tabelle „Generische Ereignisse“ (wenn der Ereignistyp „Manifested“ oder „TraceLogging“ ist)
trace.UseHandles() Stellt partielle Daten aus einer Ablaufverfolgung zu aktiven Kernelhandles bereit. Tabelle „Handles“
trace.UseHardFaults() Stellt Daten aus einer Ablaufverfolgung zu harten Seitenfehlern bereit. Tabelle „Harte Seitenfehler“
trace.UseHeapSnapshots() Stellt Daten aus einer Ablaufverfolgung zur Verwendung des Prozessheaps bereit. Tabelle „Heapmomentaufnahme“
trace.UseHypercalls() Stellt Daten zu Hyper-V-Hypercalls bereit, die während einer Ablaufverfolgung aufgetreten sind.
trace.UseImageSections() Stellt Daten aus einer Ablaufverfolgung zu den Abschnitten eines Images bereit. Spalte „Abschnittsname“ der Tabelle „CPU-Auslastung (aus Stichproben)“
trace.UseInterruptHandlingData() Stellt Daten aus einer Ablaufverfolgung zur Interrupt Service Routine (ISR)- und Deferred Procedure Call (DPC)-Aktivität (Verzögerter Prozeduraufruf) bereit. Tabelle „DPC/ISR“
trace.UseMarks() Stellt die Markierungen (bezeichnete Zeitstempel) aus einer Ablaufverfolgung bereit. Tabelle „Markierungen“
trace.UseMemoryUtilizationData() Stellt Daten aus einer Ablaufverfolgung zur Gesamtauslastung des Systemspeichers bereit. Tabelle „Arbeitsspeicherauslastung“
trace.UseMetadata() Stellt Ablaufverfolgungsmetadaten bereit, die ohne weitere Verarbeitung verfügbar sind. Systemkonfiguration, Ablaufverfolgungen und Allgemein
trace.UsePlatformIdleStates() Stellt Daten aus einer Ablaufverfolgung zu den Ziel- und tatsächlichen Plattform-Leerlaufzuständen eines Systems bereit. Tabelle „Plattform-Leerlaufzustand“
trace.UsePoolAllocations() Stellt Daten aus einer Ablaufverfolgung zur Speicherauslastung des Kernelpools bereit. Tabelle „Poolzusammenfassung“
trace.UsePowerConfigurationData() Stellt Daten aus einer Ablaufverfolgung zur Energiekonfiguration des Systems bereit. Systemkonfiguration, Energieeinstellungen
trace.UsePowerDependencyCoordinatorData() Stellt Daten aus einer Ablaufverfolgung zu aktiven Phasen des Energieabhängigkeitskoordinators bereit. Tabelle „Zusammenfassung der Benachrichtigungsphase“
trace.UseProcesses() Stellt Daten zu Prozessen bereit, die während einer Ablaufverfolgung aktiv sind, sowie deren Images und PDBs. Tabelle „Prozesse“; Tabelle „Images“; Symbole-Hub
trace.UseProcessorCounters() Stellt Daten aus einer Ablaufverfolgung zu Werten von Prozessorleistungsindikatoren aus dem Prozessorleistungsindikatoren-Monitor (Processor Counter Monitor, PCM) bereit.
trace.UseProcessorFrequencyData() Stellt Daten aus einer Ablaufverfolgung über die Häufigkeit bereit, mit der Prozessoren ausgeführt wurden. Tabelle „Prozessorfrequenz“ (wenn der Typ „Tatsächlich“ ist)
trace.UseProcessorProfileData() Stellt Daten aus einer Ablaufverfolgung zum aktiven Prozessorenergieprofil bereit. Tabelle „Prozessorprofile“
trace.UseProcessorParkingData() Stellt Daten aus einer Ablaufverfolgung darüber bereit, welche die Prozessoren geparkt oder nicht geparkt waren. Tabelle „Prozessorparkstatus“
trace.UseProcessorParkingLimits() Stellt Daten aus einer Ablaufverfolgung über die maximal zulässige Anzahl nicht geparkter Prozessoren bereit. Tabelle „Core Parking Cap State“ (Kernpark-Begrenzungszustand)
trace.UseProcessorQualityOfServiceData() Stellt Daten aus einer Ablaufverfolgung zur Dienstqualitätsebene (Quality of Service, QoS) für jeden Prozessor bereit. Tabelle „Prozessor-QoS-Klasse“
trace.UseProcessorThrottlingData() Stellt Daten aus einer Ablaufverfolgung zur Drosselung der maximalen Prozessorfrequenz bereit. Tabelle „Prozessoreinschränkungen“
trace.UseReadyBootData() Stellt Daten aus einer Ablaufverfolgung zur „boot prefetching“-Aktivität (Startvorabruf) von „Ready Boot“ (Starten bereit) bereit. Tabelle „Ready Boot-Ereignisse“ (Starten bereit)
trace.UseReferenceSetData() Stellt Daten aus einer Ablaufverfolgung zu Seiten des virtuellen Arbeitsspeichers bereit, die von den einzelnen Prozessen verwendet werden. Tabelle „Referenzsatz“
trace.UseRegionsOfInterest() Stellt Intervalle von benannten Interessensbereichen aus einer Ablaufverfolgung bereit, wie in einer XML-Konfigurationsdatei angegeben. Tabelle „Interessenbereiche“
trace.UseRegistryData() Stellt Daten zur Registrierungsaktivität während einer Ablaufverfolgung bereit. Tabelle „Registrierung“
trace.UseResidentSetData() Stellt Daten aus einer Ablaufverfolgung zu den Seiten des virtuellen Arbeitsspeichers für jeden Prozess bereit, der sich im physischen Speicher befand (resident). Tabelle „Residenter Satz“
trace.UseRundownData() Stellt Daten aus einer Ablaufverfolgung zu Intervallen bereit, während derer die Sammlung von Ablaufverfolgungs-Rundowndaten erfolgt ist. Schattierte Bereiche in der Diagrammzeitachse
trace.UseScheduledTasks() Stellt Daten zu geplanten Aufgaben bereit, die während einer Ablaufverfolgung ausgeführt wurden. Tabelle „Geplante Aufgaben“
trace.UseServices() Stellt Daten zu Diensten bereit, die aktiv waren oder deren Zustand während einer Ablaufverfolgung erfasst wurde. Tabelle „Dienste“; Systemkonfiguration, Dienste
trace.UseStacks() Stellt Daten zu Stapeln bereit, die während einer Ablaufverfolgung aufgezeichnet wurden.
trace.UseStackEvents() Stellt Daten zu Ereignissen bereit, die den während einer Ablaufverfolgung aufgezeichneten Stapeln zugeordnet sind. Tabelle „Stapel“
trace.UseStackTags() Stellt einen Mapper bereit, der Stapel aus einer Ablaufverfolgung in Stapeltags gruppiert, wie in einer XML-Konfigurationsdatei angegeben. Spalten wie „Stapeltag“ und „Stapel“ (Frametags)
trace.UseSymbols() Bietet die Möglichkeit, Symbole für eine Ablaufverfolgung zu laden. Konfigurieren von Symbolpfaden; Laden von Symbolen
trace.UseSyscalls() Stellt Daten zu Systemaufrufen (Syscalls) bereit, die während einer Ablaufverfolgung erfolgt sind. Tabelle „Syscalls“ (Systemaufrufe)
trace.UseSystemMetadata() Stellt allgemeine, systemweite Metadaten aus einer Ablaufverfolgung bereit. Systemkonfiguration
trace.UseSystemPowerSourceData() Stellt Daten aus einer Ablaufverfolgung zur aktiven Systemstromquelle (AC oder DC) bereit. Tabelle „Systemstromquelle“
trace.UseSystemSleepData() Stellt Daten aus einer Ablaufverfolgung zum Systemenergiezustand insgesamt bereit. Tabelle „Energieübergang“
trace.UseTargetCpuIdleStates() Stellt Daten aus einer Ablaufverfolgung zu CPU-C-Zielzuständen bereit. Tabelle „CPU-Leerlaufzustände“ (wenn der Typ „Ziel“ ist)
trace.UseTargetProcessorFrequencyData() Stellt Daten aus einer Ablaufverfolgung zu Prozessorzielfrequenzen bereit. Tabelle „Prozessorfrequenz“ (wenn der Typ „Ziel“ ist)
trace.UseThreads() Stellt Daten zu Threads bereit, die während einer Ablaufverfolgung aktiv waren. Tabelle „Threadlebensdauern“
trace.UseTraceStatistics() Stellt Statistiken zu den Ereignissen in einer Ablaufverfolgung bereit. Systemkonfiguration, Ablaufverfolgungsstatistiken
trace.UseUtcData() Stellt Daten aus einer Ablaufverfolgung zu Microsoft-Telemetrieaktivitäten mittels Universal Telemetry Client (UTC) bereit. Tabelle „UTC“
trace.UseWindowInFocus() Stellt Daten aus einer Ablaufverfolgung zu Änderungen am aktiven Benutzeroberflächenfenster im Fokus bereit. Tabelle „Fenster im Fokus“
trace.UseWindowsTracePreprocessorEvents() Stellt Windows-WPP-Ablaufverfolgungsereignisse (Windows Software Trace Preprocessor) aus einer Ablaufverfolgung bereit. Tabelle „WPP-Ablaufverfolgung“; Tabelle „Generische Ereignisse“ (wenn der Ereignistyp „WPP“ ist)
trace.UseWinINetData() Stellt Daten aus einer Ablaufverfolgung zu Internetaktivitäten über Windows Internet (WinINet) bereit. Tabelle „Downloaddetails“
trace.UseWorkingSetData() Stellt Daten aus einer Ablaufverfolgung zu Seiten des virtuellen Arbeitsspeichers bereit, die sich für jeden Prozess oder jede Kernelkategorie im Arbeitssatz befunden haben. Tabelle „Momentaufnahmen des virtuellen Arbeitsspeichers“

Siehe auch die Erweiterungsmethoden auf ITraceSource für alle verfügbaren Ablaufverfolgungsdaten, oder untersuchen Sie die von IntelliSense verfügbare Methode.

Nächste Schritte

In dieser Übersicht haben Sie erfahren, wie Sie mit TraceProcessor und den integrierten Datenquellen, auf die er zugreifen kann, auf Ablaufverfolgungsdaten zugreifen.

Im nächsten Schritt erfahren Sie, wie Sie TraceProcessor für den Zugriff auf benutzerdefinierte Ablaufverfolgungsdaten erweitern.