2012-01-26 5 views
8

C# 4.0 응용 프로그램이 있고이 응용 프로그램 안에 불필요한 변수가 많이 있습니다. 아래의 코드 내부 _foo 변수처럼 : 많은 불필요한 변수가 C#에서 성능 문제를 일으킬 수 있습니까?

public string Foo() { 
    var _foo = "foo bar"; 
    return _foo; 
} 

내가 언급 한 바와 같이

,이 같은 상황이 방법을 많이 내에서 발생합니다.

많은 경우 불필요한 변수 (이 경우에 설명 된 것과 같은)로 인해 C#에서 성능 문제가 발생합니까?

편집 : 내가 그들을 제거하거나 안 경우

내가 어떤 조언을 요구 하진 않았어. 제 질문은 성과에 관한 것입니다. 사실,이 응용 프로그램은 저에게 쓰여진 것이 아니며이 프로젝트에 익숙하지 않습니다. 나는 그것이 단지 어떤 향내감을 가지고 있는지 보았고 이상하게 여긴다. 효과는 코드의 품질에 영향을 미친다는 사실 외에도 효과가 있습니다.

+0

무엇을 많이? 100 또는 1.000.000? 그것들이 불필요하다면 무엇이 그들을 제거하지 못하게합니까? 어떤 응용 프로그램이 당신 것입니까? –

+0

불필요하다고 생각되면 제거하십시오. –

+4

사용하지 않는 변수는 유지 보수 개발자의 뇌 사이클을 낭비합니다. – chandmk

답변

25

(이 사례에서 설명한 것과 같은) 많은 불필요한 변수가 C#에서 성능 문제를 일으킬 수 있습니까?

아니요, 그렇지 않습니다.

public string Foo() 
{ 
    return "foo bar"; 
} 

더 정확하게에 :

.method public hidebysig instance string Foo() cil managed 
{ 
    .maxstack 1 
    .locals init (
     [0] string str) 
    L_0000: ldstr "foo bar" 
    L_0005: stloc.0 
    L_0006: ldloc.0 
    L_0007: ret 
} 

에 비해 어느

컴파일러는 릴리스 모드에서 컴파일 할 때 모든 불필요한 물건을 제거하고 당신의 코드를 최적화 할만큼 지능 그것의 디버그 모드 대응 부분은 상당히 다릅니다 :

.method public hidebysig instance string Foo() cil managed 
{ 
    .maxstack 1 
    .locals init (
     [0] string _foo, 
     [1] string CS$1$0000) 
    L_0000: nop 
    L_0001: ldstr "foo bar" 
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: stloc.1 
    L_0009: br.s L_000b 
    L_000b: ldloc.1 
    L_000c: ret 
} 

확실히 n입니다. 당신은 성능 관점에서 걱정해야 할 부분을 말합니다. 걱정해야 할 것은 코드의 가독성이며이 최적화 된 코드 예제는 사용자의 버전보다 훨씬 읽기 쉽습니다.

따라서 지속적으로 개선되고 그러한 상황을 최적화 할 수있는 컴파일러를 신뢰할 수 있습니다.

+2

+1 IL 게시 – ken2k

+0

게시 감사합니다. – tugberk

1

시스템에서 눈에 띄는 성능 문제가있는 경우가 아니면 성능을 위해 코드를 수정해서는 안됩니다. 소프트웨어 개발자로서 우리의 첫 번째 목표는 깨끗하고 읽기 쉽고 우아한 코드를 작성하는 것입니다. Darin은 위의 컴파일러가 우리를 대신하여 기계 실행을 최적화하는 작업을 수행 할 것이라고 말했다.

관련 문제