Hvis efter at du opgraderer til Windows 10 eller .NET Framework 4.7.1, og du bemærker et markant fald i ydeevne, når du løber .NET Framework-applikationer, der bruger System.Diagnostik.StackFrame klasse, så dette indlæg kan interessere dig. Vi vil se på årsagen og derefter tilbyde kendte rettelser til fejlen.
System.Diagnostik.StackFrame-ydeevne forringes
En applikation, der havde acceptabel ydeevne, der kørte på .NET Framework 4.7 eller tidligere versioner udføres langsommere, når de kører på .NET Framework 4.7.1. Applikationer er typisk afhængige af StackFrame, når de kaster .NET-undtagelser. Hvis dette sker i høj hastighed (mere end 10 hændelser pr. Sekund), kan applikationer sænkes markant (tidoblet) og køre mærkbart langsommere end før.
Årsag til systemet.Diagnostik.StackFrame-ydeevne forringes
Det .NET Framework 4.7.1 i Windows 10 tilføjede understøttelse til detektering og parsing af det bærbare PDB-filformat for at vise fil- og linjenummeroplysninger i stakspor. Som en del af denne ændring kontrolleres hver definerende modul for hver funktion i et stakspor for at afgøre, om dette modul bruger det bærbare PDB-format. På grund af nogle forskelle i den interne cachepolitik bruger runtime langt mere tid på at søge på bærbare PDB'er end tidligere .NET Framework-versioner brugte på at søge efter klassiske Windows PDB'er.
Dette medfører, at formaterede staksspor produceres langsommere end før.
Dette problem ændrer ikke antallet af undtagelser, der smides. Det mindsker imidlertid applikationernes evne til at håndtere disse undtagelser betydeligt.
Det er kendt, at applikationer, der bruger IKVM-biblioteket, påvirkes af dette problem, hvis de søger efter samlinger. Det er kendt, at det at undersøge samlinger forårsager undtagelser.
Fix System.Diagnostik.StackFrame-ydeevne nedbryder problemet
For at løse dette problem anbefaler Microsoft at bruge en af følgende metoder.
1] Brug en anden konstruktør til StackFrame, der tager et boolsk argument
Dette er den foretrukne løsning.
Hvis applikationsudviklere er i stand til at foretage ændringer i deres applikationer, skal du ringe til systemet.Diagnostik.StackTrace.#ctor (boolsk) konstruktør ved at bruge et falsk argument for at undgå at fange kildeoplysninger. Dette undgår det afsnit af koden, hvor ydeevnen mindskes.
2] Tilbagevend eller opgrader til den nyeste Windows 10-version
I denne metode skal du rulle tilbage til den forrige version / build eller opgradere til den nyeste version / build af Windows 10, hvis du oplever dette problem, og du ikke i øjeblikket kører den nyeste version af Windows 10. Afinstaller også .NET Framework 4.7.1 hvis den findes, fra din computer, og download og installer derefter en tidligere version eller den nyeste version af .NET Framework.
Håber dette hjælper!