.СЕТЬ

Система.Диагностика.Снижение производительности StackFrame в Windows 10

Система.Диагностика.Снижение производительности StackFrame в Windows 10

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

Система.Диагностика.Снижение производительности StackFrame

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

Причина системы.Диагностика.Снижение производительности StackFrame

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

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

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

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

Исправить систему.Диагностика.Проблема снижения производительности StackFrame

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

1] Используйте другой конструктор для StackFrame, который принимает логический аргумент

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

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

2] Откат или обновление до последней версии Windows 10

В этом методе вернитесь к предыдущей версии / сборке или обновите до последней версии / сборки Windows 10, если у вас возникла эта проблема, и в настоящее время вы не используете последнюю версию Windows 10. Также удалите .NET Framework 4.7.1, если таковой имеется, с вашего компьютера, а затем загрузите и установите предыдущую или последнюю версию .NET Framework.

Надеюсь это поможет!

Учебник OpenTTD
OpenTTD - одна из самых популярных бизнес-симуляторов. В этой игре вам нужно создать замечательный транспортный бизнес. Тем не менее, вы начнете в нач...
SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...