Снижение производительности System.Diagnostics.StackFrame в Windows 10

Если после обновления до Windows 10 или .NET Framework 4.7.1 вы заметите значительное снижение производительности при запуске приложений .NET Framework, использующих класс System.Diagnostics.StackFrame , этот пост может вас заинтересовать. Мы рассмотрим причину, а затем предложим известные исправления ошибки.

Снижение производительности System.Diagnostics.StackFrame

Снижение производительности System.Diagnostics.StackFrame

Приложение, которое имело приемлемую производительность в .NET Framework 4.7 или более ранних версиях, выполняется медленнее при работе в .NET Framework 4.7.1 . Приложения обычно полагаются на StackFrame, когда выдают исключения .NET. Если это происходит с высокой скоростью (более 10 инцидентов в секунду), приложения могут значительно замедлиться (в десять раз) и работать заметно медленнее, чем раньше.

Причина снижения производительности System.Diagnostics.StackFrame(Cause of the System.Diagnostics.StackFrame performance degrade)

В .NET Framework 4.7.1 в Windows 10 добавлена ​​поддержка обнаружения и анализа формата файла Portable PDB для отображения информации о номере файла и строки в трассировке стека. В рамках этого изменения для каждой функции в трассировке стека проверяется определяющий модуль, чтобы определить, использует ли этот модуль формат Portable PDB . Из-(Due) за некоторых различий во внутренней политике кэширования среда выполнения тратит гораздо больше времени на поиск Portable PDB(Portable PDBs) , чем предыдущие версии .NET Framework тратили на поиск классических Windows PDB(Windows PDBs) .

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

Эта проблема не влияет на количество создаваемых исключений. Однако это значительно снижает способность приложений обрабатывать эти исключения.

Известно, что эта проблема затрагивает приложения, использующие библиотеку IKVM , если они проверяют сборки. (IKVM)Известно, что поиск сборок вызывает исключения.

Исправить(Fix System.Diagnostics.StackFrame) проблему снижения производительности System.Diagnostics.StackFrame.

Чтобы решить эту проблему, Microsoft рекомендует использовать любой из следующих методов.

1] Используйте другой конструктор для StackFrame, который принимает логический аргумент.(1] Use a different constructor for StackFrame that takes a Boolean argument)

Это предпочтительное решение.

Если разработчики приложений могут вносить изменения в свои приложения, вызовите метод (call the) System.Diagnostics.StackTrace. #ctor( Boolean ), используя аргумент false, чтобы избежать захвата исходной информации. Это позволяет избежать раздела кода, в котором снижается производительность.

2] Откат или обновление до последней версии Windows 10.(2]  Rollback or upgrade to the latest Windows 10 version)

В этом методе откатитесь к предыдущей версии/сборке или upgrade to the latest version/build  Windows 10(Windows 10) , если вы столкнулись с этой проблемой и в настоящее время не используете последнюю версию Windows 10 . Также удалите с компьютера .NET Framework 4.7.1 , если он есть, а затем загрузите(download) и установите предыдущую или последнюю версию .NET Framework .

Hope this helps!



About the author

Я инженер-программист с более чем двухлетним опытом работы с мобильными и настольными приложениями. У меня есть опыт работы с обновлениями Windows, службами и Gmail. Мои навыки делают меня идеальным кандидатом для таких задач, как разработка приложений для Windows или поддержка почтовых клиентов.



Related posts