Получение доступа к данным трассировки
.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, а использование этого интерфейса включает следующий шаблон:
- Во-первых, сообщите процессору, какие данные вы хотите использовать из трассировки.
- Во-вторых, обработайте трассировку.
- Наконец, получите доступ к результатам.
Если вы сообщите процессору, какие типы данных вам нужны, в начале работы, не придется тратить время на обработку больших объемов данных трассировки. Вместо этого TraceProcessor выполнит только необходимую работу и предоставит запрошенные типы данных.
Рекомендуемые параметры проекта
Мы рекомендуем использовать с TraceProcessor несколько параметров проекта:
Рекомендуется запускать EXE-файлы как 64-разрядные.
В Visual Studio по умолчанию для нового консольного приложения C# .NET Framework установлено "Любой ЦП" и "Предпочитать 32-разрядную". По умолчанию для .NET может быть уже задан рекомендуемый параметр.
Обработка трассировки может требовать много ресурсов памяти, особенно если трассировка большая, и мы рекомендуем изменить целевую платформу на x64 (или снять флажок "Предпочитать 32-разрядную") в исполняемых файлах, использующих TraceProcessor. Чтобы изменить эти параметры, см. вкладку "Сборка" в разделе свойств проекта. Чтобы изменить эти параметры для всех конфигураций, убедитесь, что в раскрывающемся списке "Конфигурация" задано значение "Все конфигурации", а не текущая конфигурация (установлено по умолчанию).
Мы рекомендуем использовать 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 для доступа к пользовательским данным трассировки.
Windows developer