Узнайте о ведении журнала, трассировке, счетчиках производительности и многом другом!

Привет, народ!

В этой истории будет обсуждаться Задача 3.5: Внедрить диагностику в приложение! Я надеюсь, вам понравится это!

В последней истории была представлена ​​Задача 3.4: Отладка приложения.

Все коды для сертификационных серий можно найти здесь.

Вступление

Прежде чем писать о таких вещах, как ведение журнала, трассировка и отслеживание событий для Windows (или просто ETW), стоит обсудить, ПОЧЕМУ вы должны заботиться об этих вещах.

Да, поскольку он указан как одно из требований к экзамену, должно быть достаточно. Но, эй, есть больше причин, чтобы изучать эти предметы.

Ведение журнала и трассировка, а также трассировка событий Windows и другие обсуждаемые здесь темы помогут вам в сложной задаче анализа и диагностики проблем программного обеспечения в производственной среде. Поскольку присоединение отладчика к производственному серверу может быть затруднительным (из-за ограничения безопасности), мы останемся ТАКИМИ ПРОБЛЕМАМИ, пытаясь выяснить, как таблица SQL Server изменилась сразу после возникновения данной проблемы.

Две основные причины этого не делать:

  • Это неэффективно. Для анализа проблем без надлежащего доступа и информации требуется СТОЛЬКО времени. При этом разработчики могут довольно быстро разочароваться.
  • Это подвержено ошибкам. Скорее всего, у вас нет всей информации о проблемном «окружении» и цепочке событий, и вы можете решить проблему лишь частично. Или даже решить это неправильно (следует ли называть это решением?).

Что ж, с этими утверждениями, я искренне надеюсь, что вы будете больше заинтересованы в поиске дополнительной информации об инструментах диагностики системы.

По этим темам я настоятельно рекомендую следующую книгу:



Внедрить ведение журнала и трассировку

Ведение журнала относится к процессу записи системных данных, связанных с событиями, такими как действия функций или доступы к веб-службам. Обычно записывается такая информация, как IP-адрес клиента, временная метка, URL-адрес или вызываемый метод, а также полезные данные. Также он используется для записи ошибок. Это ценно!

Трассировка похожа на ведение журнала, но охватывает гораздо более широкий взгляд на приложение. В то время как ведение журнала генерирует данные для одной единицы выполнения в вашем коде, трассировка описывает путь. Он собирает данные в результате обмена данными между различными компонентами приложения и позволяет анализировать производительность.

В .NET Framework есть несколько классов, которые позволяют вести журнал и трассировку в пространстве имен System.Diagnostics.

Класс Debug включает ведение журнала и трассировку, но только в классе сборки, и вы могли догадаться.

Код:

Вот результат:

Как видите, класс Debug записывает в консоль вывода, а класс Console записывает в консоль приложения.

Класс TraceSource также можно использовать для регистрации данных. Его также легко настроить и начать работу.

Код:

Результат запуска этого кода ниже.

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

Сделать это можно либо по коду:

Или используя файл конфигурации следующим образом:

Профилирование приложений

Если вы хотите проанализировать производительность вашего приложения, есть только один способ: измерять, измерять, измерять!

Не поддавайтесь угадыванию, поскольку это может привести к преждевременной оптимизации.

Профилирование относится к процессу оценки потребления ресурсов вашим приложением. Есть несколько ресурсов, на которые вы можете обратить внимание, например, выделенная память, производительность сборки мусора, использование ЦП, время выполнения и т. Д.

Один из простейших способов измерения времени выполнения - использование класса Stopwatch (пространство имен System.Diagnostics).

В приведенном ниже коде я показываю использование класса Stopwatch посредством обычного сравнения производительности: конкатенации строк с использованием знака плюс и использования класса StringBuilder.

Код:

Как видите, это довольно просто. Вы можете запустить, остановить, сбросить и узнать прошедшее время.

Если у вас есть доступ к Visual Studio Professional или Ultimate, вы можете использовать инструмент Performance Wizard. Вы можете получить к нему доступ через меню «Анализ», затем выбрав «Профилировщик производительности».

Он предлагает 3 метода профилирования:

  • Использование ЦП. Измеряет использование ЦП для каждой функции.
  • Использование памяти: позволяет обнаруживать утечки памяти и плохое управление памятью.
  • Мастер производительности. Этот инструмент использует VsPerf.exe для выполнения анализа выделения памяти .NET, выборки ЦП, инструментовки и конфликтов ресурсов.

Производительность приложений - это целый мир. Я рекомендую вам проверить этот ресурс ниже и изучить его содержание и ссылки.



Создание и мониторинг счетчиков производительности

Счетчики производительности - это своего рода инструменты, которые предлагают информацию о работе приложения или операционной системы.

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

Вы можете проверить доступные счетчики, запустив «perfmon.exe» в окне «Выполнить…», открыв элемент панели навигации монитора производительности и нажав кнопку «Добавить».

В приведенном ниже коде я показываю, как создавать и отображать значения Performance Counter.

Вы можете легко получить доступ к существующим счетчикам производительности с помощью инструмента PerformanceMonitor (PerfMon.exe).

Записать в журнал событий

Хоть он и короткий, но для журналов событий Windows требуется отдельная тема. Трассировка событий для Windows (ETW) - это эффективный инструмент трассировки, позволяющий оперативно обновлять стратегию ведения журнала без перезагрузки системы.



Для записи журналов событий в Windows я рекомендую запустить Visual Studio с правами администратора.

Код:

Чтобы просмотреть сгенерированные журналы, вы можете создать собственное представление в программе просмотра событий и выбрать свой источник в качестве… источника.

Извините за скриншот с бразильским португальским языком, но я надеюсь, что он вам пригодится. ржу не могу

На этом пока все!

Итак… Мы только что закончили третью группу тем Отладка приложений и обеспечение безопасности! Следующим и последним является Реализовать доступ к данным.

Увидимся в следующем рассказе, где я расскажу о цели 4.1: выполнение операций ввода-вывода.

PS: Если вы найдете эту историю полезной, я приглашаю вас нажать кнопку «Хлопок» и поделиться ею. Также буду рад видеть Вас в качестве моего нового последователя!