Freigeben über


Die Leistung von System.Diagnostics.StackFrame verringert sich in Windows 10 und .NET Framework 4.7.1

In diesem Artikel wird ein Problem behoben, bei dem Anwendungen, die nach dem Upgrade auf Windows 10 oder Microsoft .NET Framework 4.7.1 verwendet werden, System.Diagnostics.StackFrame langsamer als zuvor ausgeführt werden.

Gilt für: Windows 10, Version 1803, Windows 10, Version 1709
Ursprüngliche KB-Nummer: 4057154

Problembeschreibung

Ab Oktober 2017 stellen Sie nach dem Upgrade auf Windows 10 oder .NET Framework 4.7.1 beim Ausführen von .NET Framework-Anwendungen, die die System.Diagnostics.StackFrame Klasse verwenden, einen erheblichen Rückgang der Leistung fest.

Anwendungen basieren in der Regel darauf StackFrame , wenn sie .NET-Ausnahmen auslösen. Wenn dies mit einer hohen Rate (mehr als 10 Vorfälle pro Sekunde) geschieht, können Anwendungen deutlich verlangsamt (zehnfach) und deutlich langsamer als zuvor ausgeführt werden.

Informationen zur Ermittlung Ihrer Windows-Version finden Sie unter Welches Windows-Betriebssystem verwende ich?.

Lösung

Dieses Problem wurde in den folgenden Windows-Updates behoben.

Verwenden Sie eine der folgenden Methoden, um dieses Problem zu umgehen.

Problemumgehung 1 (bevorzugt): Verwenden Sie einen anderen Konstruktor für StackFrame, der ein boolesches Argument verwendet.

Wenn Anwendungsentwickler Änderungen an ihren Anwendungen vornehmen können, rufen Sie den System.Diagnostics.StackTrace.#ctor(Boolean) Konstruktor mit einem falschen Argument auf, um das Erfassen von Quellinformationen zu vermeiden. Dadurch wird der Codeabschnitt vermieden, in dem die Leistung verringert wird.

Problemumgehung 2: Zurücksetzen der Systemversion

Führen Sie ein Rollback des Systems auf die vorherige Version von Windows 10 oder .NET Framework durch. Gehen Sie hierzu wie folgt vor.

Zurücksetzen auf die vorherige Version von Windows 10

  1. Öffnen Sie "Einstellungen", wählen Sie "Update & Sicherheit" und dann "Wiederherstellung" aus.

  2. Wählen Sie unter "Zurück zur vorherigen Version von Windows 10" die Option "Erste Schritte" aus.

    Screenshot der Option

  3. Wählen Sie einen Grund für das Zurücksetzen aus, und wählen Sie dann "Weiter" aus.

    Screenshot der Seite

  4. Wählen Sie "Nein" aus, da Sie die Installation von Updates überspringen möchten.

  5. Wählen Sie "Weiter " zweimal aus, und wählen Sie dann "Zurück zum früheren Build" aus.

Nachdem Sie diese Schritte ausgeführt haben, stellt Windows 10 die vorherige Version des Systems wieder her.

Screenshot des Bildschirms

Zurücksetzen auf die vorherige Version von .NET Framework

Schritte für Windows 7 SP1 und Windows Server 2008 R2 SP1:

  1. Öffnen Sie das Element "Programme und Features" in Systemsteuerung.

  2. Suchen Sie in der Liste "Programm deinstallieren oder ändern" nach Microsoft .NET Framework 4.7.1, und wählen Sie dann "Deinstallieren/Ändern" aus.

    Screenshot der Option

  3. Wählen Sie .NET Framework 4.7.1 von diesem Computer entfernen und dann "Weiter" aus.

    Screenshot der Option

  4. Wählen Sie "Weiter" , um die Deinstallation zu bestätigen.

  5. Wählen Sie "Fertig stellen" aus, nachdem die Deinstallation abgeschlossen ist.

    Screenshot: .NET Framework 4.7.1 wurde von diesem Computer entfernt.

  6. Starten Sie Ihren Computer neu, wenn Sie dazu aufgefordert werden.

Notiz

Nachdem Sie .NET Framework 4.7.1 deinstalliert haben, ist auf Ihrem Computer keine .NET Framework 4-Version mehr installiert. Sie müssen eine Version von .NET Framework 4 erneut installieren.

Schritte für Windows 8.1, Windows Server 2012, Windows Server 2012 R2 und Windows 10, Version 1607:

  1. Öffnen Sie das Element "Programme und Features" in Systemsteuerung. Geben Sie dazu appwiz.cpl in das Suchfeld ein.

  2. Wählen Sie Installierte Aktualisierungen anzeigen.

    Screenshot der Seite

  3. Klicken Sie je nach Windows-Version mit der rechten Maustaste auf eines der folgenden Elemente, und klicken Sie dann auf " Deinstallieren":

    • Windows Server 2012: Update für Microsoft Windows (KB4033345)
    • Windows 8.1 oder Server 2012 R2: Update für Microsoft Windows (KB4033369)
    • Windows 10 Version 1607: Update für Microsoft Windows (KB4033369)
  4. Klicken Sie auf "Ja ", um die Deinstallation zu bestätigen.

  5. Starten Sie Ihren Computer neu, wenn Sie dazu aufgefordert werden.

Weitere Informationen

Weitere Informationen dazu, wie viele .NET-Ausnahmen eine bestimmte Anwendung auslöst, finden Sie unter Ausnahmeleistungsindikatoren.

Weitere Informationen zum Messen der Häufigkeit von Ausnahmen für eine Anwendung finden Sie unter Runtime Profiling.

Notiz

Dieses Problem ändert nicht die Anzahl der ausgelösten Ausnahmen. Sie verringert jedoch die Fähigkeit von Anwendungen, diese Ausnahmen zu verarbeiten. Weitere Informationen zu diesem Problem finden Sie in diesem GitHub-Beitrag.

Anwendungen, die die IKVM-Bibliothek verwenden, sind bekanntermaßen von diesem Problem betroffen, wenn sie eine Probe für Assemblys sind. Das Probingen für Assemblys ist bekannt, um Ausnahmen zu verursachen.