Hvis etter at du oppgraderer til Windows 10 eller .NET Framework 4.7.1, og du merker en betydelig reduksjon i ytelsen når du løper .NET Framework-applikasjoner som bruker System.Diagnostikk.StackFrame klasse, så kan dette innlegget interessere deg. Vi vil se på årsaken, og deretter tilby kjente reparasjoner for feilen.
System.Diagnostikk.StackFrame-ytelsen forringes
En applikasjon som hadde akseptabel ytelse på .NET Framework 4.7 eller tidligere versjoner kjøres saktere når du kjører på .NET Framework 4.7.1. Programmer er vanligvis avhengige av StackFrame når de kaster .NETTE unntak. Hvis dette skjer i høy hastighet (mer enn 10 hendelser per sekund), kan applikasjoner reduseres betydelig (tidoblet) og løpe merkbart langsommere enn før.
Årsak til systemet.Diagnostikk.StackFrame-ytelsen forringes
De .NET Framework 4.7.1 i Windows 10 lagt til støtte for å oppdage og parsere det bærbare PDB-filformatet for å vise fil- og linjenummerinformasjon i stakkspor. Som en del av denne endringen har hver funksjon i en stakkspor sin definerende modul sjekket for å avgjøre om den modulen bruker det bærbare PDB-formatet. På grunn av noen forskjeller i den interne caching-policyen, bruker kjøretiden mye mer tid på å søke etter bærbare PDB-er enn tidligere .NET Framework-versjoner brukte på å lete etter klassiske Windows PDB-er.
Dette fører til at formaterte stablespor produseres saktere enn før.
Dette problemet endrer ikke antall unntak som kastes. Imidlertid reduserer det applikasjonenes mulighet til å håndtere disse unntakene betydelig.
Det er kjent at applikasjoner som bruker IKVM-biblioteket, påvirkes av dette problemet hvis de undersøker for samlinger. Det er kjent at det er unntak å undersøke forsamlinger.
Fix System.Diagnostikk.StackFrame-ytelse forringer problemet
For å løse dette problemet anbefaler Microsoft å bruke en av følgende metoder.
1] Bruk en annen konstruktør for StackFrame som tar et boolsk argument
Dette er den foretrukne løsningen.
Hvis applikasjonsutviklere er i stand til å gjøre endringer i applikasjonene sine, kan du ringe systemet.Diagnostikk.StackTrace.#ctor (boolsk) konstruktør ved å bruke et falskt argument for å unngå å fange kildeinformasjon. Dette unngår delen av koden der ytelsen reduseres.
2] Tilbakestill eller oppgrader til den nyeste Windows 10-versjonen
I denne metoden, rull tilbake til forrige versjon / build eller oppgrader til den nyeste versjonen / build av Windows 10 hvis du opplever dette problemet og du ikke kjører den siste versjonen av Windows 10. Avinstaller også .NET Framework 4.7.1 hvis den er tilstede, fra datamaskinen din, og last ned og installer en tidligere versjon eller den siste versjonen av .NET Framework.
Håper dette hjelper!