Computer >> 컴퓨터 >  >> 체계 >> Windows

Windows 10에서 System.Diagnostics.StackFrame 성능 저하

Windows 10 또는 .NET Framework 4.7.1로 업그레이드한 후 System.Diagnostics.StackFrame을 사용하는 .NET Framework 애플리케이션을 실행할 때 성능이 크게 저하되는 경우 이 게시물이 관심을 가질 수 있습니다. 원인을 살펴본 다음 알려진 오류 수정 사항을 제공하겠습니다.

System.Diagnostics.StackFrame 성능 저하

Windows 10에서 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를 다운로드하여 설치합니다.

도움이 되기를 바랍니다!

Windows 10에서 System.Diagnostics.StackFrame 성능 저하