#c# #wpf #performance
#c# #wpf #Производительность
Вопрос:
Мы регистрируем прослушиватель трассировки для отслеживания ошибок привязки в нашем приложении WPF. Это отлично работает, когда приложение запускается с подключенным отладчиком, события трассировки WPF затем автоматически активируются.
При запуске вне отладчика события трассировки должны быть включены вручную с помощью следующей строки:
PresentationTraceSources.Refresh();
Это работает до сих пор, что мы получаем события трассировки ошибок привязки. Однако мы также наблюдаем проблемы с производительностью, например, при многократном переключении вкладок; переключение вкладок становится медленнее с каждым переключением. С подключенным отладчиком или при отключении событий трассировки ошибок привязки, прокомментировав приведенное выше утверждение, проблемы с производительностью исчезли. Забавно, что сам переключатель табуляции не создает никаких дополнительных ошибок привязки.
Анализ разницы между первым переключением табуляции и десятым в профилировщике производительности показывает, что более длительное время связано с несколькими вызовами FrameworkElement.UpdateStyleProperty()
. Однако я не уверен, какое это имеет отношение к событиям ошибки привязки.
Итак, есть ли у кого-нибудь представление о том, в чем может заключаться разница между событиями трассировки ошибок привязки с подключенным отладчиком и событиями трассировки ошибок привязки с PresentationTraceSources.Refresh()
? Любая помощь или мысли приветствуются.
Комментарии:
1. Известно, что использование
PresentationTraceSources
вывода либо в окно вывода, либо во внешний файл влияет на производительность. Кроме того, установка уровня на что-то вроде highVerbose
может сделать приложение полностью непригодным для использования и должно использоваться только для целей отладки или тестирования.2. @Sheridan Да, я знаю, мы активируем события трассировки только в отладочных сборках, и даже там их можно отключить вручную. Однако мне кажется странным, что влияние событий трассировки на производительность хуже при запуске без отладчика по сравнению с запуском с подключенным отладчиком.