.NET

System.Diagnostics.StackFrame performance degrade in Windows 10

System.Diagnostics.StackFrame performance degrade in Windows 10

If after you upgrade to Windows 10 or .NET Framework 4.7.1, and you notice a significant decrease in performance when you run .NET Framework applications that use the System.Diagnostics.StackFrame class, then this post might interest you. We will look at the cause, and then offer known fixes for the error.

System.Diagnostics.StackFrame performance degrade

An application that had acceptable performance running on the .NET Framework 4.7 or earlier versions executes more slowly when running on the .NET Framework 4.7.1. Applications typically rely on StackFrame when they throw .NET exceptions. If this occurs at a high rate (more than 10 incidents per second), applications can slow down significantly (tenfold) and run noticeably slower than before.

Cause of the System.Diagnostics.StackFrame performance degrade

The .NET Framework 4.7.1 in Windows 10 added support for detecting and parsing the Portable PDB file format to show file and line number information in stack traces. As part of this change, each function in a stack trace has its defining module checked to determine if that module uses the Portable PDB format. Due to some differences in the internal caching policy, the runtime spends far more time searching for Portable PDBs than previous .NET Framework versions spent searching for classic Windows PDBs.

This causes formatted stack traces to be produced more slowly than before.

This issue does not change the number of exceptions that are thrown. However, it does significantly decrease the ability of applications to handle those exceptions.

Applications that use IKVM library are known to be affected by this issue if they probe for assemblies. Probing for assemblies is known to cause exceptions.

Fix System.Diagnostics.StackFrame performance degrade issue

To resolve this issue, Microsoft recommends using either of the following methods.

1] Use a different constructor for StackFrame that takes a Boolean argument

This is the preferred solution.

If application developers are able to make changes to their applications, call the System.Diagnostics.StackTrace.#ctor(Boolean) constructor by using a false argument to avoid capturing source information. This avoids the section of the code in which performance is decreased.

2]  Rollback or upgrade to the latest Windows 10 version

In this method, roll back to the previous version/build or upgrade to the latest version/build of Windows 10 if you're experiencing this issue and you're not currently running the latest version of Windows 10. Also uninstall .NET Framework 4.7.1 if present, from your computer and then download and install a previous version or the latest version of .NET Framework.

Hope this helps!

Cum se instalează League Of Legends pe Ubuntu 14.04
Dacă ești fan al League of Legends, atunci aceasta este o oportunitate pentru tine de a testa rula League of Legends. Rețineți că LOL este acceptat pe...
Instalați cel mai recent joc de strategie OpenRA pe Ubuntu Linux
OpenRA este un motor de jocuri de strategie în timp real Libre / Free care recreează primele jocuri Westwood, cum ar fi clasicul Command & Conquer: Re...
Instalați cel mai recent Dolphin Emulator pentru Gamecube și Wii pe Linux
Emulatorul Dolphin vă permite să jucați jocurile alese de Gamecube și Wii pe computerele personale Linux (PC). Fiind un emulator de joc liber disponi...