Поделиться через


Получение доступа к данным трассировки

.NET TraceProcessing доступен в пакете NuGet со следующим идентификатором:

Microsoft.Windows.EventTracing.Processing.All

Этот пакет позволяет получить доступ к данным в файле трассировки. Если файл трассировки еще не создан, для его создания можно использовать средство записи производительности Windows.

В следующем примере консольного приложения показано, как получить доступ к командным строкам всех процессов, содержащихся в трассировке:

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);
            }
        }
    }
}

Использование TraceProcessor

Чтобы обработать трассировку, вызовите метод TraceProcessor.Create. Основным интерфейсом является ITraceProcessor, а использование этого интерфейса включает следующий шаблон:

  1. Во-первых, сообщите процессору, какие данные вы хотите использовать из трассировки.
  2. Во-вторых, обработайте трассировку.
  3. Наконец, получите доступ к результатам.

Если вы сообщите процессору, какие типы данных вам нужны, в начале работы, не придется тратить время на обработку больших объемов данных трассировки. Вместо этого TraceProcessor выполнит только необходимую работу и предоставит запрошенные типы данных.

Мы рекомендуем использовать с TraceProcessor несколько параметров проекта:

  1. Рекомендуется запускать EXE-файлы как 64-разрядные.

    В Visual Studio по умолчанию для нового консольного приложения C# .NET Framework установлено "Любой ЦП" и "Предпочитать 32-разрядную". По умолчанию для .NET может быть уже задан рекомендуемый параметр.

    Обработка трассировки может требовать много ресурсов памяти, особенно если трассировка большая, и мы рекомендуем изменить целевую платформу на x64 (или снять флажок "Предпочитать 32-разрядную") в исполняемых файлах, использующих TraceProcessor. Чтобы изменить эти параметры, см. вкладку "Сборка" в разделе свойств проекта. Чтобы изменить эти параметры для всех конфигураций, убедитесь, что в раскрывающемся списке "Конфигурация" задано значение "Все конфигурации", а не текущая конфигурация (установлено по умолчанию).

  2. Мы рекомендуем использовать NuGet с более новым режимом PackageReference, а не старым режимом packages.config.

    Чтобы изменить значение по умолчанию для новых проектов, см. разделы о средствах, диспетчере пакетов NuGet, параметрах диспетчера пакетов, управлении пакетами и формате управления пакетами по умолчанию.

Встроенные источники данных

ETL-файл может записывать в трассировку много типов данных. Обратите внимание, что данные в ETL-файле зависят от того, какие поставщики были включены при записи трассировки. В следующем списке показаны типы данных трассировки, доступные в TraceProcessor:

Код Описание Связанные элементы WPA
trace.UseClassicEvents() Предоставляет классические события трассировки событий Windows из трассировки, которые не включают сведения о схеме. Таблица универсальных событий (если тип события — классический или WPP)
trace.UseConnectedStandbyData() Предоставляет данные из трассировки о системе, которая входит в режим ожидания подключения и выходит из него. Сводная таблица CS
trace.UseCpuIdleStates() Предоставляет данные из трассировки о C-состояниях ЦП. Таблица состояний простоя ЦП (если тип является фактическим)
trace.UseCpuSamplingData() Предоставляет данные из трассировки по использованию ЦП на основе периодической выборки указателя инструкций. Таблица загрузки ЦП (выборка)
trace.UseCpuSchedulingData() Предоставляет данные из трассировки по планированию потоков ЦП, включая переключение контекста и готовые события потока. Таблица использования ЦП (точные значения)
trace.UseDevicePowerData() Предоставляет данные из трассировки о D-состояниях устройств. Таблица D-состояний устройств
trace.UseDirectXData() Предоставляет данные из трассировки о действиях DirectX. Таблица использования GPU
traceUseDiskIOData() Предоставляет данные из трассировки активности дискового ввода-вывода. Таблица использования диска
trace.UseEnergyEstimationData() Предоставляет данные из трассировки для оценки потребления энергии каждым процессом из подсистемы оценки энергии. Сводная таблица подсистемы оценки энергии (по процессам)
trace.UseEnergyMeterData() Предоставляет данные из трассировки измеряемого потребления энергии из интерфейса измерения энергии (EMI). Таблица подсистемы оценки энергии (по EMI)
trace.UseFileIOData() Предоставляет данные из трассировки активности файлового ввода-вывода. Таблица файлового ввода-вывода
trace.UseGenericEvents() Предоставляет объявленные события и события TraceLogging из трассировки. Таблица универсальных событий (если тип события — объявленное или TraceLogging)
trace.UseHandles() Предоставляет частичные данные из трассировки об активных дескрипторах ядра. Таблица дескрипторов
trace.UseHardFaults() Предоставляет данные из трассировки об устойчивых ошибках страниц. Таблица устойчивых ошибок
trace.UseHeapSnapshots() Предоставляет данные из трассировки об использовании кучи процесса. Таблица моментальных снимков кучи
trace.UseHypercalls() Предоставляет данные о гипермасштабированиях Hyper-V, произошедших во время трассировки.
trace.UseImageSections() Предоставляет данные из трассировки о разделах изображения. Столбец "Имя раздела" в таблице "Использование ЦП (выборка)"
trace.UseInterruptHandlingData() Предоставляет данные из трассировки о программе обработки прерываний (ISR) и отложенных вызовах процедуры (DPC). Таблица DPC/ISR
trace.UseMarks() Предоставляет метки (метки времени) из трассировки. Таблица меток
trace.UseMemoryUtilizationData() Предоставляет данные из трассировки об общем использовании системной памяти. Таблица использования памяти
trace.UseMetadata() Предоставляет доступ к метаданным трассировки без дальнейшей обработки. Конфигурация системы, трассировки и общие сведения
trace.UsePlatformIdleStates() Предоставляет данные из трассировки о целевых и фактических состояниях простоя платформы в системе. Таблица состояний простоя платформы
trace.UsePoolAllocations() Предоставляет данные из трассировки об использовании памяти пулом ядра. Сводная таблица пула
trace.UsePowerConfigurationData() Предоставляет данные из трассировки о конфигурации питания системы. Конфигурация системы, параметры питания
trace.UsePowerDependencyCoordinatorData() Предоставляет данные из трассировки об активных фазах координатора зависимости от питания. Сводная таблица фазы уведомления
trace.UseProcesses() Предоставляет данные о процессах, активных в ходе трассировки, а также их изображения и PDB. Таблица процессов, таблица изображений, центр символов
trace.UseProcessorCounters() Предоставляет данные из трассировки о значениях счетчика производительности процессора из монитора счетчиков процессора (PCM).
trace.UseProcessorFrequencyData() Предоставляет данные из трассировки о частоте запуска процессоров. Таблица частоты процессора (если выбран тип — фактический)
trace.UseProcessorProfileData() Предоставляет данные из трассировки об активном профиле питания процессора. Таблица профилей процессоров
trace.UseProcessorParkingData() Предоставляет данные из трассировки о том, какие процессоры были приостановлены или повторно запущены. Таблица состояния приостановки процессоров
trace.UseProcessorParkingLimits() Предоставляет данные из трассировки о максимально допустимом количестве повторно запущенных процессоров. Таблица состояний лимита приостановленных ядер
trace.UseProcessorQualityOfServiceData() Предоставляет данные из трассировки об уровне качества обслуживания для каждого процессора. Таблица классов качества обслуживания процессора
trace.UseProcessorThrottlingData() Предоставляет данные из трассировки о регулировании максимальной частоты процессора. Таблица ограничений процессора
trace.UseReadyBootData() Предоставляет данные из трассировки о действиях предварительной начальной загрузки из Ready Boot. Таблица событий Ready Boot
trace.UseReferenceSetData() Предоставляет данные из трассировки о страницах виртуальной памяти, используемых каждым процессом. Таблица набора ссылок
trace.UseRegionsOfInterest() Предоставляет именованные области процентных интервалов из трассировки, как указано в XML-файле конфигурации. Таблица процентных областей
trace.UseRegistryData() Предоставляет данные о действиях в реестре во время трассировки. Таблица реестра
trace.UseResidentSetData() Предоставляет данные из трассировки о страницах виртуальной памяти для каждого процесса, находящихся в физической памяти. Таблица наборов резидентов
trace.UseRundownData() Предоставляет данные из трассировки об интервалах, в течение которых произошло замедление сбора данных трассировки. Затененные области на временной шкале графа
trace.UseScheduledTasks() Предоставляет данные о запланированных задачах, которые выполнялись во время трассировки. Таблица запланированных задач
trace.UseServices() Предоставляет данные о службах, которые были активны или состояние которых было записано во время трассировки. Таблица служб; конфигурация системы, службы
trace.UseStacks() Предоставляет данные о стеках, записанных во время трассировки.
trace.UseStackEvents() Предоставляет данные о событиях, связанных со стеками, записанными во время трассировки. Таблица стеков
trace.UseStackTags() Предоставляет средство сопоставления, которое группирует стеки из трассировки в теги стека, как указано в XML-файле конфигурации. Столбцы, такие как "Тег стека" и "Стек" (теги кадров)
trace.UseSymbols() Предоставляет возможность загрузки символов для трассировки. Настройка путей к символам; загрузка символов
trace.UseSyscalls() Предоставляет данные о системных вызовах, произошедших во время трассировки. Таблица системных вызовов
trace.UseSystemMetadata() Предоставляет общие системные метаданные из трассировки. Конфигурация системы
trace.UseSystemPowerSourceData() Предоставляет данные из трассировки об активном источнике питания системы (перем./пост. ток). Таблица источника питания системы
trace.UseSystemSleepData() Предоставляет данные из трассировки об общем состоянии энергопотребления системы. Таблица энергопотребления
trace.UseTargetCpuIdleStates() Предоставляет данные из трассировки о целевых C-состояниях ЦП. Таблица состояний простоя ЦП (если тип является целевым)
trace.UseTargetProcessorFrequencyData() Предоставляет данные из трассировки о целевых процессорных частотах. Таблица частоты процессора (если выбран тип — целевой)
trace.UseThreads() Предоставляет данные о потоках, активных во время трассировки. Таблица времени существования потока
trace.UseTraceStatistics() Предоставляет статистику о событиях в трассировке. Конфигурация системы, статистика трассировки
trace.UseUtcData() Предоставляет данные из трассировки о действии телеметрии Майкрософт с помощью универсального клиента телеметрии (UTC). Таблица UTC
trace.UseWindowInFocus() Предоставляет данные из трассировки об изменениях активного окна пользовательского интерфейса в фокусе. Таблица окна в фокусе
trace.UseWindowsTracePreprocessorEvents() Предоставляет события препроцессора трассировки ПО Windows (WPP) из трассировки. Таблица трассировки WPP; таблица универсальных событий (если тип события — WPP)
trace.UseWinINetData() Предоставляет данные из трассировки об интернет-активности через Интернет Windows (WinINet). Таблица сведений о загрузке
trace.UseWorkingSetData() Предоставляет данные из трассировки о страницах виртуальной памяти, которые были в рабочем наборе для каждого процесса или категории ядра. Таблица моментальных снимков виртуальной памяти

См. также методы расширения в ITraceSource для всех доступных данных трассировки или проверьте метод, доступный из trace.

Next Steps

В этом обзоре вы узнали, как получить доступ к данным трассировки с помощью TraceProcessor и встроенных источников данных, к которым он может получить доступ.

Следующий шаг — узнайте, как расширить TraceProcessor для доступа к пользовательским данным трассировки.