.NETTO

Systemet.Diagnostik.StackFrame-prestanda försämras i Windows 10

Systemet.Diagnostik.StackFrame-prestanda försämras i Windows 10

Om efter uppgradering till Windows 10 eller .NET Framework 4.7.1, och du märker en signifikant minskning av prestanda när du kör .NET Framework-applikationer som använder Systemet.Diagnostik.StackFrame klass, då kan det här inlägget intressera dig. Vi kommer att titta på orsaken och sedan erbjuda kända korrigeringar för felet.

Systemet.Diagnostik.StackFrame-prestanda försämras

En applikation som hade acceptabel prestanda som körs på .NET Framework 4.7 eller tidigare versioner körs långsammare när de körs på .NET Framework 4.7.1. Applikationer är vanligtvis beroende av StackFrame när de kastar .NET-undantag. Om detta sker i hög hastighet (mer än 10 incidenter per sekund) kan applikationer sakta ner (tiofaldigt) och köras märkbart långsammare än tidigare.

Orsak till systemet.Diagnostik.StackFrame-prestanda försämras

De .NET Framework 4.7.1 i Windows 10 lade till stöd för att upptäcka och analysera det bärbara PDB-filformatet för att visa fil- och radnummerinformation i stackspår. Som en del av denna ändring har varje funktion i en stapelspårning kontrollerat sin definierande modul för att avgöra om den modulen använder det bärbara PDB-formatet. På grund av vissa skillnader i den interna cachepolicyn spenderar körtiden mycket mer tid på att söka efter bärbara PDB än tidigare .NET Framework-versioner spenderade på att söka efter klassiska Windows PDB.

Detta gör att formaterade stackspår produceras långsammare än tidigare.

Den här frågan ändrar inte antalet undantag som kastas. Det minskar dock applikationsförmågan att hantera dessa undantag avsevärt.

Det är känt att applikationer som använder IKVM-biblioteket påverkas av detta problem om de söker efter enheter. Det är känt att det är undantag att testa för sammankomster.

Fix System.Diagnostik.StackFrame-prestanda försämrar problemet

För att lösa problemet rekommenderar Microsoft att du använder någon av följande metoder.

1] Använd en annan konstruktör för StackFrame som tar ett booleskt argument

Detta är den föredragna lösningen.

Om applikationsutvecklare kan göra ändringar i sina applikationer, ring systemet.Diagnostik.StackTrace.#ctor (Boolean) konstruktör genom att använda ett falskt argument för att undvika att fånga källinformation. Detta undviker den del av koden där prestandan minskar.

2] Återställ eller uppgradera till den senaste Windows 10-versionen

I den här metoden, rulla tillbaka till föregående version / build eller uppgradera till den senaste versionen / build av Windows 10 om du upplever detta problem och du inte för närvarande kör den senaste versionen av Windows 10. Avinstallera också .NET Framework 4.7.1 om det finns, från din dator och sedan ladda ner och installera en tidigare version eller den senaste versionen av .NET Framework.

Hoppas det här hjälper!

Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...
Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...
OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...