"as" 및 Nullable 유형을 사용한 놀라운 성능
배경
"as" C#의 연산자는 동적 유형 검사 및 안전한 캐스팅을 허용합니다. 이는 캐스트가 뒤따르는 전통적인 "is" 연산자에 비해 잠재적으로 성능을 향상시킬 수 있습니다. 그러나 최근 테스트 사례에서 예상치 못한 성능 결과가 관찰되었습니다.
테스트 앱 및 결과
널 참조가 포함된 객체 배열의 정수를 합산하기 위해 테스트 앱이 개발되었습니다. , 문자열 참조 및 박스형 정수. 앱은 "Cast"(C# 1에 해당), "As"("as" 연산자 사용) 및 "LINQ"(OfType() 확장 메서드 사용)의 세 가지 접근 방식을 활용했습니다. 놀랍게도 "Cast" 접근 방식은 "As" 접근 방식보다 훨씬 빨랐고, 결과적으로 "LINQ" 접근 방식보다 약간 느렸습니다.
분석
JIT 컴파일러는 메모리 내 값 변환을 활용하므로 "Cast" 접근 방식을 위한 매우 효율적인 코드를 생성할 수 있습니다. 객체는 boxing된 값과 동일한 유형의 변수로만 unboxing될 수 있으며, 이는 캐스팅 프로세스를 단순화합니다.
"As" 접근 방식을 사용하려면 Nullable
"LINQ" 접근 방식은 "is" 연산자와 도우미 함수 JIT_Unbox()를 통한 일반 캐스트를 사용합니다. "As" 접근 방식보다 성능이 약간 더 뛰어나지만 ngen.exe 최적화로 인해 여전히 느립니다.
결론
"as" 연산자가 항상 그런 것은 아닐 수도 있습니다. 특히 성능에 민감한 상황에서 "Cast" 접근 방식에 비해 성능 이점을 제공합니다. "LINQ" 접근 방식은 실행 가능한 대안이지만 성능 제한이 발생할 수도 있습니다. 따라서 최적의 접근 방식을 선택하기 전에 구체적인 상황을 고려하고 장단점을 고려하는 것이 중요합니다.
위 내용은 이 Nullable 정수 합계 테스트에서 C#의 'as' 연산자가 기존 캐스팅보다 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!