Windows 10 또는 .NET Framework 4.7.1로 업그레이드한 후 System.Diagnostics.StackFrame을 사용하는 .NET Framework 애플리케이션을 실행할 때 성능이 크게 저하되는 경우 이 게시물이 관심을 가질 수 있습니다. 원인을 살펴본 다음 알려진 오류 수정 사항을 제공하겠습니다.
System.Diagnostics.StackFrame 성능 저하
.NET Framework 4.7 또는 이전 버전에서 실행 중인 허용 가능한 성능을 가진 응용 프로그램은 .NET Framework 4.7.1에서 실행할 때 더 느리게 실행됩니다. 응용 프로그램은 일반적으로 .NET 예외를 throw할 때 StackFrame에 의존합니다. 이 문제가 빠른 속도로 발생하면(초당 10건 이상) 애플리케이션이 크게(10배) 느려지고 이전보다 눈에 띄게 느려질 수 있습니다.
System.Diagnostics.StackFrame 성능 저하의 원인
Windows 10의 .NET Framework 4.7.1은 스택 추적에서 파일 및 줄 번호 정보를 표시하기 위해 Portable PDB 파일 형식을 감지하고 구문 분석하는 지원을 추가했습니다. 이 변경 사항의 일부로 스택 추적의 각 기능은 해당 모듈이 Portable PDB 형식을 사용하는지 확인하기 위해 정의 모듈을 검사합니다. 내부 캐싱 정책의 몇 가지 차이점으로 인해 런타임은 이전 .NET Framework 버전이 클래식 Windows PDB를 검색하는 데 소비한 것보다 훨씬 더 많은 시간을 Portable PDB 검색에 소비합니다.
이로 인해 형식이 지정된 스택 추적이 이전보다 느리게 생성됩니다.
이 문제는 throw되는 예외 수를 변경하지 않습니다. 그러나 이러한 예외를 처리하는 응용 프로그램의 기능은 크게 감소합니다.
IKVM 라이브러리를 사용하는 응용 프로그램은 어셈블리를 검색하는 경우 이 문제의 영향을 받는 것으로 알려져 있습니다. 어셈블리를 검색하면 예외가 발생하는 것으로 알려져 있습니다.
System.Diagnostics.StackFrame 성능 저하 문제 수정
이 문제를 해결하려면 다음 방법 중 하나를 사용하는 것이 좋습니다.
1] 부울 인수를 사용하는 StackFrame에 대해 다른 생성자 사용
이것이 선호되는 솔루션입니다.
응용 프로그램 개발자가 응용 프로그램을 변경할 수 있는 경우 false 인수를 사용하여 System.Diagnostics.StackTrace.#ctor(Boolean) 생성자를 호출하여 소스 정보 캡처를 방지합니다. 이렇게 하면 성능이 저하되는 코드 섹션을 피할 수 있습니다.
2] 최신 Windows 10 버전으로 롤백 또는 업그레이드
이 방법에서 이 문제가 발생하고 현재 최신 버전의 Windows 10을 실행하지 않는 경우 이전 버전/빌드로 롤백하거나 Windows 10의 최신 버전/빌드로 업그레이드합니다. .NET Framework 4.7도 제거하세요. .1(있는 경우) 컴퓨터에서 이전 버전 또는 최신 버전의 .NET Framework를 다운로드하여 설치합니다.
도움이 되기를 바랍니다!