Partager via


Les performances de System.Diagnostics.StackFrame diminuent dans Windows 10 et .NET Framework 4.7.1

Cet article vous aide à résoudre un problème où les applications qui utilisent System.Diagnostics.StackFrame s’exécutent plus lentement qu’avant la mise à niveau vers Windows 10 ou Microsoft .NET Framework 4.7.1.

S’applique à : Windows 10, version 1803, Windows 10, version 1709
Numéro de base de connaissances d’origine : 4057154

Symptômes

À compter d’octobre 2017, après la mise à niveau vers Windows 10 ou .NET Framework 4.7.1, vous remarquez une diminution significative des performances lorsque vous exécutez des applications .NET Framework qui utilisent la System.Diagnostics.StackFrame classe.

Les applications s’appuient généralement sur StackFrame le moment où elles lèvent des exceptions .NET. Si cela se produit à un taux élevé (plus de 10 incidents par seconde), les applications peuvent ralentir considérablement (dix fois) et s’exécuter sensiblement plus lentement qu’auparavant.

Pour déterminer votre version de Windows, consultez quel système d’exploitation Windows est-il en cours d’exécution ?.

Résolution

Ce problème est résolu dans les mises à jour Windows suivantes.

Pour contourner ce problème, appliquez l’une des méthodes ci-dessous.

Solution de contournement 1 (par défaut) : utilisez un constructeur différent pour StackFrame qui prend un argument booléen

Si les développeurs d’applications peuvent apporter des modifications à leurs applications, appelez le constructeur à l’aide System.Diagnostics.StackTrace.#ctor(Boolean) d’un faux argument pour éviter de capturer des informations sources. Cela évite la section du code dans laquelle les performances sont réduites.

Solution de contournement 2 : restaurer la version du système

Restaurez le système vers la version précédente de Windows 10 ou .NET Framework. Pour ce faire, procédez comme suit.

Comment revenir à la version précédente de Windows 10

  1. Ouvrez Paramètres, sélectionnez Mettre à jour et sécurité, puis sélectionnez Récupération.

  2. Sous Revenir à la version précédente de Windows 10, sélectionnez Prise en main.

    Capture d’écran de l’option Revenir à l’option de version précédente dans La récupération De Windows 10.

  3. Sélectionnez une raison de restauration, puis sélectionnez Suivant.

    Capture d’écran de la page Pourquoi revenez-vous.

  4. Sélectionnez Non, merci d’ignorer l’installation des mises à jour.

  5. Sélectionnez Suivant deux fois, puis revenez à la build précédente.

Une fois ces étapes terminées, Windows 10 restaure la version précédente du système.

Capture d’écran de la restauration de votre version précédente de Windows.

Comment revenir à la version précédente de .NET Framework

Étapes pour Windows 7 SP1 et Windows Server 2008 R2 SP1 :

  1. Ouvrez l’élément Programmes et fonctionnalités dans Panneau de configuration.

  2. Dans la liste Désinstaller ou modifier un programme , recherchez et sélectionnez Microsoft .NET Framework 4.7.1, puis sélectionnez Désinstaller/Modifier.

    Capture d’écran de l’option Désinstaller/modifier .Net Framework 4.7.1 dans programmes et fonctionnalités dans Panneau de configuration.

  3. Sélectionnez Supprimer .NET Framework 4.7.1 de cet ordinateur, puis sélectionnez Suivant.

    Capture d’écran de l’option Supprimer .NET Framework 4.7.1 de cet ordinateur.

  4. Sélectionnez Continuer à confirmer la désinstallation.

  5. Sélectionnez Terminer une fois la désinstallation terminée.

    Capture d’écran montrant que .NET Framework 4.7.1 a été supprimé de cet ordinateur.

  6. Redémarrez votre ordinateur si vous y êtes invité.

Note

Après avoir désinstallé .NET Framework 4.7.1, votre ordinateur n’a plus de version de .NET Framework 4 installée. Vous devez réinstaller une version de .NET Framework 4.

Étapes pour Windows 8.1, Windows Server 2012, Windows Server 2012 R2 et Windows 10 version 1607 :

  1. Ouvrez l’élément Programmes et fonctionnalités dans Panneau de configuration. Pour ce faire, tapez appwiz.cpl dans la zone de recherche.

  2. Sélectionnez Afficher les mises à jour installées.

    Capture d’écran de la page Afficher les mises à jour installées dans Programmes et fonctionnalités.

  3. Cliquez avec le bouton droit sur l’un des éléments suivants, en fonction de votre version de Windows, puis cliquez sur Désinstaller :

    • Windows Server 2012 : Mise à jour pour Microsoft Windows (KB4033345)
    • Windows 8.1 ou Server 2012 R2 : Mise à jour pour Microsoft Windows (KB4033369)
    • Windows 10 version 1607 : Mise à jour pour Microsoft Windows (KB4033369)
  4. Cliquez sur Oui pour confirmer la désinstallation.

  5. Redémarrez votre ordinateur si vous y êtes invité.

Plus d’informations

Pour plus d’informations sur le nombre d’exceptions .NET levées par une application particulière, consultez Compteurs de performances d’exception.

Pour plus d’informations sur la façon de mesurer le taux d’exceptions pour une application, consultez Profilage du runtime.

Note

Ce problème ne modifie pas le nombre d’exceptions levées. Toutefois, elle réduit considérablement la capacité des applications à gérer ces exceptions. Pour plus d’informations sur ce problème, consultez ce billet GitHub.

Les applications qui utilisent la bibliothèque IKVM sont connues pour être affectées par ce problème s’ils sondent les assemblys. La détection des assemblys est connue pour provoquer des exceptions.