Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 Windows 10 version 1709
31 janvier 2018-KB4058258 (build du système d’exploitation 16299.214)
Pour toutes les autres versions de Windows prises en charge
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
Ouvrez Paramètres, sélectionnez Mettre à jour et sécurité, puis sélectionnez Récupération.
Sous Revenir à la version précédente de Windows 10, sélectionnez Prise en main.
Sélectionnez une raison de restauration, puis sélectionnez Suivant.
Sélectionnez Non, merci d’ignorer l’installation des mises à jour.
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.
Comment revenir à la version précédente de .NET Framework
Étapes pour Windows 7 SP1 et Windows Server 2008 R2 SP1 :
Ouvrez l’élément Programmes et fonctionnalités dans Panneau de configuration.
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.
Sélectionnez Supprimer .NET Framework 4.7.1 de cet ordinateur, puis sélectionnez Suivant.
Sélectionnez Continuer à confirmer la désinstallation.
Sélectionnez Terminer une fois la désinstallation terminée.
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 :
Ouvrez l’élément Programmes et fonctionnalités dans Panneau de configuration. Pour ce faire, tapez appwiz.cpl dans la zone de recherche.
Sélectionnez Afficher les mises à jour installées.
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)
Cliquez sur Oui pour confirmer la désinstallation.
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.