Pogorszenie wydajności System.Diagnostics.StackFrame w systemie Windows 10

Jeśli po uaktualnieniu do systemu Windows 10 lub .NET Framework 4.7.1 zauważysz znaczny spadek wydajności podczas uruchamiania aplikacji .NET Framework korzystających z klasy System.Diagnostics.StackFrame , ten wpis może Cię zainteresować. Przyjrzymy się przyczynie, a następnie zaproponujemy znane poprawki błędu.

Pogorszenie wydajności System.Diagnostics.StackFrame

Pogorszenie wydajności System.Diagnostics.StackFrame

Aplikacja, która miała akceptowalną wydajność działającą w .NET Framework 4,7 lub wcześniejszych wersjach, działa wolniej podczas uruchamiania w .NET Framework 4.7.1 . Aplikacje zazwyczaj polegają na StackFrame, gdy zgłaszają wyjątki .NET. Jeśli dzieje się to z dużą szybkością (ponad 10 incydentów na sekundę), aplikacje mogą znacznie zwolnić (dziesięciokrotnie) i działać zauważalnie wolniej niż wcześniej.

Przyczyna obniżenia wydajności System.Diagnostics.StackFrame(Cause of the System.Diagnostics.StackFrame performance degrade)

.NET Framework 4.7.1 w systemie Windows 10(Windows 10) dodał obsługę wykrywania i analizowania formatu pliku Portable PDB w celu wyświetlenia informacji o pliku i numerze wiersza w śladach stosu. W ramach tej zmiany każda funkcja w śledzeniu stosu ma sprawdzany moduł definiujący, aby określić, czy ten moduł używa formatu Portable PDB . Ze względu(Due) na pewne różnice w wewnętrznych zasadach buforowania środowisko uruchomieniowe spędza znacznie więcej czasu na wyszukiwaniu przenośnych plików PDB(Portable PDBs) niż poprzednie wersje .NET Framework poświęcone na wyszukiwanie klasycznych plików PDB systemu Windows(Windows PDBs) .

Powoduje to, że sformatowane ślady stosu są tworzone wolniej niż wcześniej.

Ten problem nie zmienia liczby zgłaszanych wyjątków. Jednak znacznie zmniejsza zdolność aplikacji do obsługi tych wyjątków.

Wiadomo, że ten problem dotyczy aplikacji korzystających z biblioteki IKVM , jeśli wyszukują zestawy. (IKVM)Wiadomo, że sondowanie zestawów powoduje wyjątki.

Napraw(Fix System.Diagnostics.StackFrame) problem ze spadkiem wydajności System.Diagnostics.StackFrame

Aby rozwiązać ten problem, firma Microsoft(Microsoft) zaleca użycie jednej z następujących metod.

1] Użyj innego konstruktora dla StackFrame, który przyjmuje argument logiczny(1] Use a different constructor for StackFrame that takes a Boolean argument)

To jest preferowane rozwiązanie.

Jeśli deweloperzy aplikacji mogą wprowadzać zmiany w swoich aplikacjach, wywołaj (call the) System.Diagnostics.StackTrace. Konstruktor #ctor( Boolean ) przy użyciu fałszywego argumentu, aby uniknąć przechwytywania informacji o źródle. Pozwala to uniknąć sekcji kodu, w której wydajność jest zmniejszona.

2] Przywróć lub uaktualnij do najnowszej wersji systemu Windows 10(2]  Rollback or upgrade to the latest Windows 10 version)

W tej metodzie przywróć poprzednią wersję/kompilację lub upgrade to the latest version/build  systemu Windows 10 , jeśli napotykasz ten problem i nie korzystasz obecnie z najnowszej wersji systemu Windows 10 . Odinstaluj również program .NET Framework 4.7.1 , jeśli jest obecny, z komputera, a następnie pobierz(download) i zainstaluj poprzednią lub najnowszą wersję programu .NET Framework .

Hope this helps!



About the author

Jestem web developerem i inżynierem dźwięku z ponad 10-letnim doświadczeniem. Specjalizuję się w tworzeniu aplikacji Chrome/Web Audio, a także aplikacji Discord. Moje umiejętności w obu dziedzinach pozwalają mi tworzyć produkty wysokiej jakości, które są łatwe w obsłudze i utrzymaniu. Ponadto jestem doświadczonym użytkownikiem Discorda i pracuję nad aplikacją od ponad dwóch lat.



Related posts