Smanjenje performansi System.Diagnostics.StackFrame u sustavu Windows 10

Ako nakon nadogradnje na Windows 10 ili .NET Framework 4.7.1 primijetite značajno smanjenje performansi kada pokrenete .NET Framework aplikacije koje koriste klasu System.Diagnostics.StackFrame , onda bi vas ovaj post mogao zanimati. Pogledat ćemo uzrok, a zatim ponuditi poznate popravke za pogrešku.

Smanjenje performansi System.Diagnostics.StackFramea

Smanjenje performansi System.Diagnostics.StackFramea

Aplikacija koja je imala prihvatljivu izvedbu koja se izvodi na .NET Frameworku 4.7(.NET Framework 4.7) ili starijim verzijama izvršava se sporije kada se izvodi na .NET Framework 4.7.1 . Aplikacije se obično oslanjaju na StackFrame kada bacaju .NET iznimke. Ako se to događa velikom brzinom (više od 10 incidenata u sekundi), aplikacije se mogu značajno usporiti (deseterostruko) i raditi osjetno sporije nego prije.

Uzrok pogoršanja performansi System.Diagnostics.StackFramea(Cause of the System.Diagnostics.StackFrame performance degrade)

.NET Framework 4.7.1 u sustavu Windows 10 dodao je podršku za otkrivanje i raščlanjivanje formata Portable PDB datoteke za prikaz informacija o broju datoteke i reda u tragovima stogova. Kao dio ove promjene, svaka funkcija u praćenju steka ima provjeren modul za definiranje kako bi se utvrdilo koristi li taj modul Portable PDB format. Zbog(Due) nekih razlika u internoj politici predmemorije, vrijeme izvođenja troši daleko više vremena na traženje prijenosnih PDB-ova(Portable PDBs) nego prethodne verzije .NET Frameworka(Framework) koje su provele tražeći klasične Windows PDB-ove(Windows PDBs) .

To uzrokuje da se formatirani tragovi snopa proizvode sporije nego prije.

Ovaj problem ne mijenja broj iznimki koje se bacaju. Međutim, to značajno smanjuje sposobnost aplikacija da obrađuju te iznimke.

Poznato je da su aplikacije koje koriste IKVM biblioteku pogođene ovim problemom ako traže sklopove. Poznato je da ispitivanje sklopova uzrokuje iznimke.

Popravite(Fix System.Diagnostics.StackFrame) problem s degradacijom performansi System.Diagnostics.StackFrame

Da biste riješili ovaj problem, Microsoft preporučuje korištenje jedne od sljedećih metoda.

1] Koristite drugi konstruktor za StackFrame koji uzima Booleov argument(1] Use a different constructor for StackFrame that takes a Boolean argument)

Ovo je poželjno rješenje.

Ako programeri aplikacija mogu napraviti promjene u svojim aplikacijama, pozovite (call the) System.Diagnostics.StackTrace. #ctor( Boolean ) konstruktor korištenjem lažnog argumenta kako bi se izbjeglo hvatanje izvornih informacija. Time se izbjegava dio koda u kojem je izvedba smanjena.

2] Vratite ili nadogradite na najnoviju verziju sustava Windows 10(2]  Rollback or upgrade to the latest Windows 10 version)

Ovom metodom vratite se na prethodnu verziju/izgradnju ili upgrade to the latest version/build  sustava Windows 10 ako naiđete na ovaj problem, a trenutno ne koristite najnoviju verziju sustava Windows 10 . Također deinstalirajte .NET Framework 4.7.1 ako postoji, sa svog računala, a zatim preuzmite(download) i instalirajte prethodnu verziju ili najnoviju verziju .NET Frameworka(.NET Framework) .

Hope this helps!



About the author

Ja sam stručnjak za korisničku podršku za Windows 10/11/10 s više od 5 godina iskustva. Također sam strastveni igrač posljednjih nekoliko godina i snažno me zanima xbox One. Moj trenutni fokus je pomaganje korisnicima s problemima koje imaju sa svojim Windows 10 ili Windows 11 sustavima, često kroz korištenje naših alata za korisničku podršku, kao što je podrška pozivnog centra i online pomoć.



Related posts