Wenn nach dem Upgrade Ihres Windows oder .NET Framework 4.7.1und Sie bemerken beim Laufen einen erheblichen Leistungsabfall .NETZ Framework-Anwendungen, die das verwenden System.Diagnostics.StackFrame Klasse, dann könnte dieser Beitrag Sie interessieren. Wir werden die Ursache untersuchen und dann bekannte Lösungen für den Fehler anbieten.
System.Diagnostics.StackFrame-Leistungsverschlechterung
Eine Anwendung mit akzeptabler Leistung unter .NET Framework 4.7 oder früheren Versionen wird langsamer ausgeführt, wenn sie unter .NET Framework 4.7.1 ausgeführt wird. Anwendungen verlassen sich normalerweise auf StackFrame, wenn sie .NET-Ausnahmen auslösen. Wenn dies mit einer hohen Geschwindigkeit geschieht (mehr als 10 Vorfälle pro Sekunde), können Anwendungen erheblich langsamer werden (das Zehnfache) und merklich langsamer als zuvor laufen.
Ursache für den Leistungsabfall von System.Diagnostics.StackFrame
Das .NET Framework 4.7.1 in Windows 10 hat Unterstützung für die Erkennung und Analyse des Portable PDB-Dateiformats hinzugefügt, um Datei- und Zeilennummerninformationen in Stack-Traces anzuzeigen. Im Rahmen dieser Änderung wird für jede Funktion in einem Stack-Trace das definierende Modul überprüft, um festzustellen, ob dieses Modul das Portable PDB-Format verwendet. Aufgrund einiger Unterschiede in der internen Caching-Richtlinie verbringt die Laufzeit weitaus mehr Zeit mit der Suche nach tragbaren PDBs als frühere .NET Framework-Versionen mit der Suche nach klassischen Windows-PDBs.
Dies führt dazu, dass formatierte Stack-Traces langsamer als zuvor erstellt werden.
Dieses Problem ändert nicht die Anzahl der ausgelösten Ausnahmen. Allerdings verringert sich dadurch die Fähigkeit von Anwendungen, diese Ausnahmen zu verarbeiten, erheblich.
Es ist bekannt, dass Anwendungen, die die IKVM-Bibliothek verwenden, von diesem Problem betroffen sind, wenn sie nach Assemblys suchen. Es ist bekannt, dass die Suche nach Assemblys Ausnahmen verursacht.
Behebung des Problems mit der Leistungseinbuße von System.Diagnostics.StackFrame
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 akzeptiert
Dies ist die bevorzugte Lösung.
Wenn Anwendungsentwickler Änderungen an ihren Anwendungen vornehmen können, Ruf den System.Diagnostics.StackTrace.#ctor(Boolean)-Konstruktor mithilfe eines falschen Arguments, um die Erfassung von Quellinformationen zu vermeiden. Dadurch wird der Abschnitt des Codes vermieden, in dem die Leistung beeinträchtigt ist.
2]Rollback oder Upgrade auf die neueste Windows-Version
Führen Sie bei dieser Methode ein Rollback auf die vorherige Version/den vorherigen Build durch oder führen Sie ein Upgrade auf die neueste Version/den neuesten Build von Windows 11/10 durch, wenn dieses Problem bei Ihnen auftritt und Sie derzeit nicht die neueste Version von Windows verwenden. Deinstallieren Sie außerdem .NET Framework 4.7.1, falls vorhanden, von Ihrem Computer und anschließend herunterladen und installieren Sie eine frühere Version oder die neueste Version von .NET Framework.
Hoffe das hilft!