Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Как логировать работу программы с помощью ETW?

#c_sharp #net #clr #логирование


Информация о работе .NET выводится в ETW (Event Tracing for Windows) и ее можно получить
с помощью программы PerfView.
Как из приложения выводить свою информацию в ETW?
И возможно ли выводить 100 тыс. сообщений в секунду? 
    


Ответы

Ответ 1



ETW позволяет выводить до 500 тыс. сообщений в секунду с минимальными затратами. Например, надо в ETW выводить уведомления о ходе выполнения, а также информацию о начале и завершении какой-то активности. Для этого надо определить класс, производный от EventSource. using System.Diagnostics.Tracing; [EventSource(Name = "MyApp")] class MyAppEvent : EventSource { public static MyAppEvent Log = new MyAppEvent(); [Event(1)] // уведомление о ходе выполнения public void Progress(int v, string msg) { WriteEvent(1, v, msg); } [Event(2, Opcode = EventOpcode.Start)] // начало активности public void StartAction(int id) { WriteEvent(2, id); } [Event(3, Opcode = EventOpcode.Stop)] // завершение активности public void StopAction(int id) { WriteEvent(3, id); } } для вывода в ETW пишем partial class MainWindow : Window { public MainWindow() { var log = MyAppEvent.Log; ... log.Start(1); log.Progress(1, "ok"); log.Stop(1); Компилируем и из командной строки запускаем PerView > PerfView /OnlyProviders=*MyApp run WpfApplication.exe В результате создается PerfViewData.etl.zip, в котором находится файл PerfViewData.etl - его можно открыть в PerfView и посмотреть информацию, например, по вызовам Start.

Комментариев нет:

Отправить комментарий