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


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

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

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

Дальнейшие шаги

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

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