Ja pēc jaunināšanas uz Windows 10 vai .NET Framework 4.7.1, un, palaižot, pamanāt ievērojamu veiktspējas samazināšanos .NET Framework lietojumprogrammas, kas izmanto Sistēma.Diagnostika.StackFrame klasē, tad šis ieraksts varētu jūs interesēt. Mēs izskatīsim cēloni un pēc tam piedāvāsim zināmus kļūdas labojumus.
Sistēma.Diagnostika.StackFrame veiktspēja pasliktinās
Lietojumprogramma, kurai bija pieņemama veiktspēja .NET Framework 4.7 vai vecākas versijas darbojas lēnāk, darbojoties ar .NET Framework 4.7.1. Lietotnes parasti paļaujas uz StackFrame, kad tās met .NET izņēmumi. Ja tas notiek lielā ātrumā (vairāk nekā 10 gadījumi sekundē), lietojumprogrammas var ievērojami palēnināties (desmitkārtīgi) un darboties ievērojami lēnāk nekā iepriekš.
Sistēmas cēlonis.Diagnostika.StackFrame veiktspēja pasliktinās
The .NET Framework 4.7.1 operētājsistēmā Windows 10 ir pievienots atbalsts Portable PDB faila formāta noteikšanai un parsēšanai, lai parādītu informāciju par failu un līnijas numuru kaudzes pēdās. Kā daļu no šīm izmaiņām katrai kaudzes izsekošanas funkcijai tiek pārbaudīts tās definējošais modulis, lai noteiktu, vai šajā modulī tiek izmantots Portable PDB formāts. Sakarā ar dažām iekšējās kešatmiņas politikas atšķirībām izpildlaiks pavada daudz vairāk laika portatīvo PDB meklēšanai nekā iepriekšējais .NET Framework versijas pavadīja klasisko Windows PDB meklēšanu.
Tas izraisa formatētu kaudzes pēdu veidošanos lēnāk nekā iepriekš.
Šis jautājums nemaina izmesto izņēmumu skaitu. Tomēr tas ievērojami samazina lietojumprogrammu spēju rīkoties ar šiem izņēmumiem.
Ir zināms, ka šī problēma ietekmē lietojumprogrammas, kas izmanto IKVM bibliotēku, ja tās pārbauda asamblejas. Ir zināms, ka asambleju zondēšana rada izņēmumus.
Labot sistēmu.Diagnostika.StackFrame veiktspēja pasliktina problēmu
Lai novērstu šo problēmu, Microsoft iesaka izmantot kādu no šīm metodēm.
1] StackFrame izmantojiet citu konstruktoru, kas izmanto Būla argumentu
Šis ir vēlamais risinājums.
Ja lietojumprogrammu izstrādātāji var veikt izmaiņas savās lietojumprogrammās, zvaniet uz sistēmu.Diagnostika.StackTrace.#ctor (Būla) konstruktors, izmantojot nepatiesu argumentu, lai izvairītos no avota informācijas tveršanas. Tas ļauj izvairīties no tā koda sadaļas, kurā veiktspēja ir samazināta.
2] Atgriešana vai jaunināšana uz jaunāko Windows 10 versiju
Izmantojot šo metodi, atgriezieties pie iepriekšējās Windows 10 versijas / jaunināšanas vai jaunināšanas uz jaunāko versiju / būvējumu, ja rodas šī problēma un pašlaik nedarbojat jaunāko Windows 10 versiju. Arī atinstalēt .NET Framework 4.7.1, ja tāds ir, no sava datora un pēc tam lejupielādējiet un instalējiet iepriekšējo vai jaunāko versiju .NET Framework.
Ceru tas palīdzēs!