Производителността на System.Diagnostics.StackFrame се влошава в Windows 10

Ако след като надстроите до Windows 10 или .NET Framework 4.7.1 и забележите значително намаляване на производителността, когато стартирате приложения на .NET Framework, които използват класа System.Diagnostics.StackFrame , тогава тази публикация може да ви заинтересува. (System.Diagnostics.StackFrame)Ще разгледаме причината и след това ще предложим известни корекции на грешката.

Влошава се производителността на System.Diagnostics.StackFrame

Влошава се производителността на System.Diagnostics.StackFrame

Приложение, което има приемлива производителност, работещо на .NET Framework 4.7 или по-ранни версии, се изпълнява по-бавно, когато се изпълнява на .NET Framework 4.7.1 . Приложенията обикновено разчитат на StackFrame, когато хвърлят .NET изключения. Ако това се случи с висока скорост (повече от 10 инцидента в секунда), приложенията могат да се забавят значително (десетократно) и да работят значително по-бавно от преди.

Причина за влошаване на производителността на System.Diagnostics.StackFrame(Cause of the System.Diagnostics.StackFrame performance degrade)

.NET Framework 4.7.1 в Windows 10 добави поддръжка за откриване и синтактичен анализ на файловия формат Portable PDB , за да се покаже информация за номера на файла и ред в стека. Като част от тази промяна, всяка функция в трасиране на стека има проверен дефиниращ модул, за да се определи дали този модул използва Portable PDB формата. Поради(Due) някои разлики във вътрешната политика за кеширане, времето за изпълнение прекарва много повече време в търсене на преносими PDB,(Portable PDBs) отколкото предишните версии на .NET Framework , прекарани в търсене на класически PDB на Windows(Windows PDBs) .

Това кара форматираните стек следи да се произвеждат по-бавно от преди.

Този проблем не променя броя на хвърлените изключения. Това обаче значително намалява способността на приложенията да обработват тези изключения.

Известно е , че приложенията, които използват библиотека IKVM , са засегнати от този проблем, ако проверяват за сглобки. Известно е, че сондирането за монтажи причинява изключения.

Поправете(Fix System.Diagnostics.StackFrame) проблема с влошаването на производителността на System.Diagnostics.StackFrame

За да разрешите този проблем, Microsoft препоръчва използването на един от следните методи.

1] Използвайте различен конструктор за StackFrame, който приема булев аргумент(1] Use a different constructor for StackFrame that takes a Boolean argument)

Това е предпочитаното решение.

Ако разработчиците на приложения могат да правят промени в своите приложения, извикайте (call the) System.Diagnostics.StackTrace. #ctor( Boolean ) конструктор чрез използване на фалшив аргумент, за да се избегне улавянето на информация за източника. Това избягва частта от кода, в която производителността е намалена.

2] Отмяна или надстройка до най-новата версия на Windows 10(2]  Rollback or upgrade to the latest Windows 10 version)

При този метод се върнете към предишната версия/комплектиране или upgrade to the latest version/build  на Windows 10 , ако изпитвате този проблем и в момента не използвате най-новата версия на Windows 10 . Също така деинсталирайте .NET Framework 4.7.1 , ако има такъв, от вашия компютър и след това изтеглете(download) и инсталирайте предишна версия или най-новата версия на .NET Framework .

Hope this helps!



About the author

Аз съм компютърен професионалист, който има опит в работата със софтуер на Microsoft Office, включително Excel и PowerPoint. Имам опит и с Chrome, който е браузър, собственост на Google. Моите умения включват отлична писмена и устна комуникация, решаване на проблеми и критично мислене.



Related posts