Ak po inovácii na Windows 10 alebo Windows 7 .NET Framework 4.7.1 a pri behu si všimnete výrazný pokles výkonu .NET Framework aplikácie, ktoré používajú Systém.Diagnostika.StackFrame triedy, potom by vás tento príspevok mohol zaujímať. Pozrime sa na príčinu a potom ponúkneme známe opravy chyby.
Systém.Diagnostika.Zníženie výkonu StackFrame
Aplikácia, ktorá mala prijateľný výkon bežiaci na serveri .NET Framework 4.7 alebo staršie verzie sa pri spustení na serveri Windows spustia pomalšie .NET Framework 4.7.1. Aplikácie sa pri hodení zvyčajne spoliehajú na StackFrame .NET výnimky. Ak k tomu dôjde vysokou rýchlosťou (viac ako 10 incidentov za sekundu), aplikácie sa môžu výrazne spomaliť (desaťkrát) a bežať výrazne pomalšie ako predtým.
Príčina systému.Diagnostika.Zníženie výkonu StackFrame
The .NET Framework 4.7.1 vo Windows 10 pridaná podpora detekcie a syntaktickej analýzy formátu súboru Portable PDB na zobrazenie informácií o čísle súboru a riadku v stopách zásobníka. V rámci tejto zmeny má každá funkcia v sledovaní zásobníka skontrolovaný svoj definičný modul, aby zistila, či tento modul používa formát Portable PDB. Kvôli niektorým rozdielom v politike interného ukladania do medzipamäte trávi runtime hľadaním prenosných PDB oveľa viac času ako v predchádzajúcich .Verzie NET Framework strávené hľadaním klasických Windows PDB.
To spôsobí, že naformátované stopy zásobníka sa budú produkovať pomalšie ako predtým.
Tento problém nemení počet udelených výnimiek. Výrazne to však znižuje schopnosť aplikácií tieto výnimky spracovať.
Je známe, že tento problém ovplyvňuje aplikácie, ktoré používajú knižnicu IKVM, ak skúmajú zhromaždenia. Je známe, že sondovanie pre zostavy spôsobuje výnimky.
Opravný systém.Diagnostika.Problém so znížením výkonu StackFrame
Na vyriešenie tohto problému spoločnosť Microsoft odporúča použiť niektorú z nasledujúcich metód.
1] Pre StackFrame použite iný konštruktor, ktorý použije logický argument
Toto je preferované riešenie.
Ak sú vývojári aplikácií schopní vykonať zmeny vo svojich aplikáciách, zavolajte na Systém.Diagnostika.StackTrace.Konštruktor #ctor (boolovský) pomocou nepravdivého argumentu, aby sa zabránilo zachytávaniu informácií o zdroji. Takto sa vyhnete časti kódu, v ktorej je výkon znížený.
2] Vrátiť späť alebo inovovať na najnovšiu verziu Windows 10
V tejto metóde sa vráťte späť na predchádzajúcu verziu / zostavenie alebo inovujte na najnovšiu verziu / zostavenie systému Windows 10, ak máte tento problém a momentálne nepoužívate najnovšiu verziu systému Windows 10. Tiež odinštalovať .NET Framework 4.7.1, ak existuje, z počítača a potom stiahnite a nainštalujte predchádzajúcu alebo najnovšiu verziu servera .Internetová sieť.
Dúfam, že to pomôže!