2012-08-11 4 views
1

그래서 난 당신이 성과 복잡성을 제거하고 향상시키기 위해 오버로드 된 메서드를 사용할 수 있다고이 문서 C# Overloads을 읽고 그리고 그들은 다음과 같은 예를 제공합니다C# - 오버로드의 성능 향상 쿼리

시스템을 사용하여; 그럼 그들이 사용하는 오버로드를 다시

class Program 
{ 
    public static void Main() 
    { 
    ShowString(string.Empty); 
    ShowString("Category"); 
    } 

    static void ShowString(string value) 
    { 
    if (value == string.Empty) 
    { 
     Console.WriteLine("Popular"); 
    } 
    else 
    { 
     Console.WriteLine(value); 
    } 
    } 
} 

:

using System; 

class Program 
{ 
    public static void Main() 
    { 
    ShowString(); 
    ShowString("Category"); 
    } 

    static void ShowString() 
    { 
    // Send default argument to overload. 
    ShowString("Popular"); 
    } 

    static void ShowString(string value) 
    { 
    // We don't need an if check here, which makes 
    // ... calling this method directly faster. 
    Console.WriteLine(value); 
    } 
} 

오버로드가 기본 매개 변수 값이 방법을 사용하는 것보다 더 나은 성능 결과를 제공 변형 사용겠습니까?

:

using System; 

class Program 
{ 
    public static void Main() 
    { 
    ShowString(); 
    ShowString("Category"); 
    } 

    static void ShowString(string value = "Popular") 
    { 
    // We don't need an if check here, which makes 
    // ... calling this method directly faster. 
    Console.WriteLine(value); 
    } 
} 

또는 코드의 마지막 블록은 코드의 첫 번째 블록의 상당?

+0

성능이 언어 기능의 척도가되는 경우는 드뭅니다. –

답변

2

마지막 예제로 컴파일하기 때문에 아니, 기본 매개 변수는, 적어도 빨리 과부하 (단위 : 대신 디버그의 방출을 위해 만들어진 경우) 가능성이 인라인 될 것

.... 
ShowString("Popular"); 
ShowString("Category"); 
.... 

두 번째 예 (오버로드를 사용하여) 런타임시 성능이 마지막 예제 (기본 매개 변수)와 동일하게됩니다.

이 예는 다소 어리 석다. 왜냐하면 value == string.Empty의 비용은 실질적으로 아무 것도 없기 때문이다. 그러나 나는 그 점을 설명하는 역할을한다고 생각한다. 그러나이 대답에서 가장 중요한 비트는 아마도 다음과 같습니다. 조숙 한 최적화을 사용하기 전에 항상 더 명확하고 유지 보수가 쉬운 코드를 사용해야하므로 주어진 상황에서 사용해야하는 것을 결정할 때 사용 가능성이 우선되어야합니다 .

+0

정보 및 조언에 감사드립니다! – IneedHelp

2

오버로드가 반드시 성능과 관련이있는 것은 아닙니다. 이 경우 차이는 작습니다. 매개 변수가없는 버전이다

call, ldstr, call 

(상관없이 값이 지정되어 있는지의 기본 파라미터 버전 포함) 인 파라미터 버전 :

ldstr, call, ldarg_0, call 

그러나이 성능에 영향을주지한다; 성능과 관련된 유일한 것은 다른 모든 것보다 느린 콘솔을 호출하는 것입니다.

실례 : 실제 문제가 발생하지 않는 한 걱정하지 마세요.

오버로드는 특정 방법으로 최적화 된 버전이 허용되는 경우 (예 : 권투를 제거 할 때)보다 유용합니다.

+0

정보를 제공해 주셔서 감사합니다. – IneedHelp