.NETZ

System.Diagnose.StackFrame-Leistungsverschlechterung in Windows 10

System.Diagnose.StackFrame-Leistungsverschlechterung in Windows 10

Wenn Sie nach dem Upgrade auf Windows 10 oder .NET-Framework 4.7.1 und Sie bemerken einen deutlichen Leistungsabfall beim Laufen .NET Framework-Anwendungen, die die System.Diagnose.Stapelrahmen Klasse, dann könnte dich dieser Beitrag interessieren. Wir werden die Ursache untersuchen und dann bekannte Lösungen für den Fehler anbieten.

System.Diagnose.StackFrame-Leistungsverschlechterung

Eine Anwendung mit akzeptabler Leistung auf dem on .NET-Framework 4.7 oder frühere Versionen werden langsamer ausgeführt, wenn sie auf dem .NET-Framework 4.7.1. Anwendungen verlassen sich normalerweise auf StackFrame, wenn sie werfen .NET-Ausnahmen. Tritt dies mit hoher Geschwindigkeit auf (mehr als 10 Vorfälle pro Sekunde), können Anwendungen deutlich langsamer (zehnfach) und merklich langsamer als zuvor ausgeführt werden.

Ursache des Systems.Diagnose.StackFrame-Leistungsverschlechterung

Das .NET-Framework 4.7.1 in Windows 10 hat Unterstützung für das Erkennen und Analysieren des Portable PDB-Dateiformats hinzugefügt, um Datei- und Zeilennummerninformationen in Stacktraces anzuzeigen. Als Teil dieser Änderung wird das definierende Modul jeder Funktion in einem Stack-Trace überprüft, um festzustellen, ob dieses Modul das Portable PDB-Format verwendet. Aufgrund einiger Unterschiede in der internen Caching-Richtlinie verbringt die Laufzeit viel mehr Zeit mit der Suche nach Portable PDBs als zuvor .NET Framework-Versionen, die mit der Suche nach klassischen Windows-PDBs verbracht wurden.

Dadurch werden formatierte Stacktraces langsamer als zuvor erzeugt produced.

Dieses Problem ändert nicht die Anzahl der ausgelösten Ausnahmen. Es verringert jedoch die Fähigkeit von Anwendungen, diese Ausnahmen zu behandeln, erheblich.

Es ist bekannt, dass Anwendungen, die die IKVM-Bibliothek verwenden, von diesem Problem betroffen sind, wenn sie nach Baugruppen suchen. Das Suchen nach Assemblys verursacht bekanntermaßen Ausnahmen.

Fix-System.Diagnose.Problem mit StackFrame-Leistungsverschlechterung

Um dieses Problem zu beheben, empfiehlt Microsoft die Verwendung einer der folgenden Methoden.

1] Verwenden Sie einen anderen Konstruktor für StackFrame, der ein boolesches Argument verwendet

Dies ist die bevorzugte Lösung.

Wenn Anwendungsentwickler Änderungen an ihren Anwendungen vornehmen können, rufen Sie das System.Diagnose.StackTrace.#ctor(Boolean)-Konstruktor durch Verwendung eines falschen Arguments, um das Erfassen von Quellinformationen zu vermeiden. Dadurch wird der Abschnitt des Codes vermieden, in dem die Leistung verringert wird.

2]  Rollback oder Upgrade auf die neueste Windows 10-Version

Führen Sie bei dieser Methode ein Rollback zur vorherigen Version/einem vorherigen Build oder einem Upgrade auf die neueste Version/einen Build von Windows 10 durch, wenn dieses Problem auftritt und Sie derzeit nicht die neueste Version von Windows 10 ausführen. Auch deinstallieren .NET-Framework 4.7.1 falls vorhanden, von Ihrem Computer und laden Sie dann eine frühere Version oder die neueste Version von . herunter und installieren Sie sie .NET-Framework.

Hoffe das hilft!

Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...
Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...