C#스위치 문:기본값을 사용하지 않는 것이 더 효율적입니까?



performance switch-statement (2)

Visual Studio에서 각 case에 값을 반환하는 switch 문만 포함 된 C # 메서드를 만들었습니다. 개인적 습관으로 다음 코드와 비슷한 것을 넣었습니다.

private string SwitchMethod(int num)
    {
        switch (num)
        {
            case 0:
                return "result 1";
            case 1:
                return "result 2";
            case 2:
                return "result 3";
        }
        return "no result";
    }

내 질문은 : 어떤 코드가 더 나은 성능을 것입니다? 위 또는 아래의 코드 또는 동일합니까? 그리고 왜?

나는 컴파일러 최적화 때문에 그것들은 단지 같을 것이라고 생각할 것이다. 그러나 나는 정말로 모른다.

private string SwitchMethod(int num)
    {
        switch (num)
        {
            case 0:
                return "result 1";
            case 1:
                return "result 2";
            case 2:
                return "result 3";
            default:
                return "no result";
        }
    }

개정 : 나는 좀 더 구체적이어야한다고 생각합니다 : 컴파일 될 때 ... 덜 효율적인 코드가 생성 될 것인가?

나는 공연의 차이가 중요하지 않을 수도 있다는 것을 알고있다. 나는 정말로 호기심이 많다.

https://src-bin.com


Answer #1

다른 사례가 유효하지 않은 경우 스위치의 기본에 항상 기본 사례를 포함시키는 것이 좋습니다.

이전 사례 중 하나가 적중하면 프로그램이 다른 사례를 확인하지 않기 때문에 효율성 문제가 아닙니다. if / else if / else - 최종 else가 기본값 인 경우와 동일합니다.

희망이 도움이됩니다.


Answer #2

함수와 switch 문 대신 키가 KofaxEnvironment이고 값이 스위치에서 반환하는 값과 같은 일반적인 사전을 사용하는 것이 좋습니다. 같은 것 :

Dictionary<KofaxEnvironment, string>

또는

Dictionary<int, string>

나는 또한 공연에 대해 걱정하지 않을 것이다. 정확함이 첫 번째 목표 여야합니다.

그러나 스위치를 사용하는 경우 예외를 throw하는 기본값을 사용하십시오.

default:
    throw new ArgumentException("Serious programmer error!");

그리고 성능면에서 스위치 기본값과 차이 사이의 차이는 무시할 수 있습니다.





switch-statement