2010-05-31 7 views
3

:ToString()은 컴파일러에서 최적화되어 있습니까? 가정하자 내가 코드 다음 한

Console.WriteLine("Value1: " + SomeEnum.Value1.ToString() + "\r\nValue2: " + 
        SomeOtherEnum.Value2.ToString()); 

윌 컴파일러 최적화 이것에 : 나는 IL 디스어셈블러 그것을 확인했고 IL_005a: callvirt instance string [mscorlib]System.Object::ToString()

나는 돈에 대한 호출이있다

Console.WriteLine("Value1: " + SomeEnum.Value1 + "\r\nValue2: " + 
         SomeOtherEnum.Value2); 

JIT가 이것을 최적화하는지 알 수 없습니다.

+0

늦었고 뭔가 누락 된 것일 수 있지만 최적화 방법은 무엇입니까? –

+0

@Jon Seigel 나는 ToString()을 쓰지 않고 그냥 적게 입력하는 것을 피할 수있는 곳이지만, 친구는 불필요한 오버 헤드라고 말하면서 나는 여기에 어떤 의심도 없애라고 요청했다. – TheVillageIdiot

+0

'Value1'이 string 타입 일 때, JIT 컴파일러는'ToString'에 대한 호출을 최적화 할 수 있습니다. – Steven

답변

3

아니요, 그 반대의 경우입니다. 이 :

Console.WriteLine("Value1: " + SomeEnum.Value1 + "\r\nValue2: " + 
        SomeOtherEnum.Value2); 

으로는 컴파일러 (동등)이 번역된다

string s = String.Concat("Value1: ", SomeEnum.Value1.ToString(), "\r\n Value2: ", SomeOtherEnum.Value2.ToString()); 
Console.WriteLine(s); 

두 경우에서, 동일한 IL이 생성된다. JIT가 그걸 JIT로 바꾸는 지 물어 보면 :

string s = String.Concat("Value1: ", "Value1", "\r\n Value2: ", "Value2"); 
Console.WriteLine(s); 

그러면 대답은 '아니오'입니다. 그게 왜 너에게 문제가 될지 궁금해하지만?

+0

@Jon Seigel 님의 댓글에 대한 의견보기 – TheVillageIdiot

+0

그래, 어쨌든, 게시 한 두 줄은 기본적으로 동일합니다. ReSharper와 같은 도구가 있으면 ToString()에 대한 호출이 중복 될 때 실제로 알려줍니다. 성능에 문제가있는 것은 아닙니다. 단지 필요하지 않습니다. –

관련 문제