C# 예외의 성능 비용: 사실인가요, 거짓인가요?
C#의 뛰어난 성능은 항상 논란의 여지가 있었습니다. 스택이 깊지 않으면 성능 손실이 크지 않지만 다양한 의견이 일치하지 않습니다.
정확한 성능 테스트
이 문제를 해결하기 위해 우리는 Jon Skeet의 이전 연구와 유사한 벤치마크를 개발했습니다. 테스트 결과에 따르면 100만 개의 예외를 처리하는 데 29914밀리초가 소요됩니다. 즉, 1밀리초마다 약 33개의 예외가 처리된다는 의미입니다. 이는 대부분의 경우 값을 반환하는 대신 예외가 충분히 빠르다는 것을 보여줍니다.
반환값과 비교
그러나 반환 값을 사용하면 동일한 프로그램이 1밀리초 이내에 완료됩니다. 이는 예외가 반환 값 보다 최소 30,000배 느리다는 것을 의미합니다. 이는 최소한의 시간 소모적이며 실제로 예외를 발생시키거나 포착하는 데 더 많은 시간이 걸릴 수 있다는 점에 유의해야 합니다.
테스트 환경
디버거를 활성화하지 않고 .NET 4.0 릴리스를 실행하는 Intel Core 2 Duo T8100 @ 2.1GHz 기반 노트북에서 테스트되었습니다.
테스트 코드
다음 코드 조각은 성능 비교를 보여줍니다.
<code class="language-csharp">static void Main(string[] args) { int iterations = 1000000; Console.WriteLine("Starting " + iterations.ToString() + " iterations...\n"); var stopwatch = new Stopwatch(); // 异常测试 stopwatch.Reset(); stopwatch.Start(); for (int i = 1; i <= iterations; i++) { try { // ... 异常代码 ... } catch (Exception) { // ... 异常处理 ... } } stopwatch.Stop(); Console.WriteLine("Exceptions: " + stopwatch.ElapsedMilliseconds + "ms"); // 返回值测试 stopwatch.Reset(); stopwatch.Start(); for (int i = 1; i <= iterations; i++) { // ... 返回值代码 ... } stopwatch.Stop(); Console.WriteLine("Return Codes: " + stopwatch.ElapsedMilliseconds + "ms"); }</code>
(참고: 여기서는 특정 예외 코드 및 반환 값 코드가 생략되었으며 이는 단지 예시일 뿐입니다.) 전체 테스트 코드에는 특정 예외 발생 및 처리 논리와 반환 값 판단이 포함되어야 합니다. 논리 . 그래야만 보다 정확한 성능 비교가 이루어질 수 있습니다.
위 내용은 C# 예외는 실제로 반환 코드보다 훨씬 느립니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!