Узнайте о ведении журнала, трассировке, счетчиках производительности и многом другом!
Привет, народ!
В этой истории будет обсуждаться Задача 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: Если вы найдете эту историю полезной, я приглашаю вас нажать кнопку «Хлопок» и поделиться ею. Также буду рад видеть Вас в качестве моего нового последователя!