Каково влияние трассировки на С# и ASP.NET?

Я нашел это в некотическом коде ввода, который я смотрел недавно...

HttpContext.Current.Trace.Write(query + ": " + username + ", " + password));

... где query - это короткий SQL-запрос для захвата соответствующих пользователей. Имеет ли это какое-либо влияние на производительность? Я предполагаю, что он очень маленький.

Также, какова цель этого точного типа трассировки, используя HTTP-контекст? Куда прослеживаются эти данные? Спасибо заранее!

Ответ 1

Да, это будет иметь влияние производительности, когда константа условной компиляции TRACE определяется во время сборки. Выполнение чего-либо имеет некоторый эффект:)

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

Но, как всегда, не доверяйте мне, доверяйте профилировщику.

Ответ 2

У меня нет очков репутации для комментариев, но я хотел бы сделать быстрое выражение об ответе Джонатана. Цифры, которые я видел, похоже, показывают, что нет смысла использовать stringbuilder только для нескольких конкатенаций строк. Накладные расходы на создание объекта stringbuilder перевешивают преимущество скорости конкатенации.

Ответ 3

Самая большая потеря производительности в этом фрагменте кода находится не в трассировке, а в конкатенации строк с помощью оператора+. Это делает некоторые неэффективные операции с памятью, которые могут бить операцию ввода-вывода с точки зрения производительности. Я бы изменил его, чтобы использовать что-то вроде string.Concat или класса StringBuilder (или string.Format, если на то пошло).

Ответ 4

Сообщения о трассировке могут отправляться в разные места. Вы можете добавить (или удалить) TraceListeners для Консоли, Окно Отладки VisualStudio, Файлы или Журнал событий, чтобы назвать несколько. Вы даже можете создать свой собственный.

Кроме того, вы можете настроить Trace на то, чтобы ничего не делать при компиляции для Release.

Таким образом, влияние использования трассировки может сильно варьироваться, от нуля до полного увядания вашего приложения, в зависимости от того, какие слушатели активны. Большинство слушателей, однако, имеют о том, какое влияние вы ожидаете. Для записи в файл или базу данных или в консоль требуется много работы, а трассировка не добавляет слишком много служебных данных по отношению к этим связанным с I/O действиям.

Ответ 5

И если трассировка записывается в текстовый файл, это будет стоить дороже, чем писать в консоль IMHO

Ответ 6

Я думаю, что Trace Source просматривает свой переключатель TraceLevel перед отправкой сообщений слушателям. Поэтому, если мы сохраним значение TraceLevel по умолчанию по умолчанию на "Ошибка", тогда накладные расходы трассировки будут значительно уменьшены, так как только треки "Ошибка" будут отправлены слушателям.

просто догадка... я еще ничего не измерил. Будет обновление, если я это сделаю.

Обновление 2017: представляется устаревшим, но довольно удобным способом отслеживания/регистрации информации на странице браузера/удаленно доступной .aspx в приложении asp.net.

https://msdn.microsoft.com/en-IN/library/z48bew18(v=vs.71).aspx

Ответ 7

"Трассировка добавляет дополнительные накладные расходы к запросам и не должна быть включена для развернутых приложений. Однако инструкции Trace.Write() могут быть оставлены, поскольку они игнорируются, когда трассировка не включена."

http://msdn.microsoft.com/en-us/library/ms972204.aspx