Проблемы с производительностью WPF с PresentationTraceSources

#c# #wpf #performance

#c# #wpf #Производительность

Вопрос:

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

При запуске вне отладчика события трассировки должны быть включены вручную с помощью следующей строки:

 PresentationTraceSources.Refresh();
 

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

Анализ разницы между первым переключением табуляции и десятым в профилировщике производительности показывает, что более длительное время связано с несколькими вызовами FrameworkElement.UpdateStyleProperty() . Однако я не уверен, какое это имеет отношение к событиям ошибки привязки.

Итак, есть ли у кого-нибудь представление о том, в чем может заключаться разница между событиями трассировки ошибок привязки с подключенным отладчиком и событиями трассировки ошибок привязки с PresentationTraceSources.Refresh() ? Любая помощь или мысли приветствуются.

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

1. Известно, что использование PresentationTraceSources вывода либо в окно вывода, либо во внешний файл влияет на производительность. Кроме того, установка уровня на что-то вроде high Verbose может сделать приложение полностью непригодным для использования и должно использоваться только для целей отладки или тестирования.

2. @Sheridan Да, я знаю, мы активируем события трассировки только в отладочных сборках, и даже там их можно отключить вручную. Однако мне кажется странным, что влияние событий трассировки на производительность хуже при запуске без отладчика по сравнению с запуском с подключенным отладчиком.