2012-12-04 6 views
0

나는 상황이있다 :클래스를 생성하거나 생성해야합니까?

나는 수업에서 뭔가를 해야할지 모른다.

각 작업에 대해 IF 또는 생성 된 메쏘와 같은 방식으로이 방법을 수정하는 것이 더 효과적일까요?

public value Value(int command) 
     { 
      if (command == 1) 
      { 
       DoSomething1(); 
      } 

      if (command == 2) 
      { 
       DoSomething2(); 
      } 
      else 
      { 
       return empty(); 
      } 


     } 

이 명령어 중 50 개 이상이 더 많을 것입니다. 실행 가능한 실행 파일의 크기와 실행 가능한 파일 크기는 어떻게됩니까?

+2

첫 번째 강의 : 실제로 문제가 될 때까지 성능에 대해 걱정하지 마십시오. 특정 문제에 대한 해결책이 있으면 성능 문제가 발생하지 않습니다. –

+1

Simon Whitehead가 말한 것을 확장하려면 가독성에 대해 걱정하십시오. 가독성은 코드를 작성할 때 항상 최우선 적으로 고려해야합니다. – ScottS

답변

4

높은 수준에서 어떤 종류의 다이나믹 디스패치 시스템을 구현하려는 것처럼 보입니까? 아니면 다형성없이 지정된 연산을 수행하기를 원합니까? 알기가 어렵습니다.

enum Command { // observe how I use an enum instead "magic" integers 
    DoSomethingX = 1, 
    DoSomethingY = 2 
} 

public Value GetValue(Command command) { 
    switch(command) { 
     case Command.DoSomethingX: return DoSomethingX(); 
     case Command.DoSomethingY: return DoSomethingY(); 
     default: return GetEmpty(); 
    } 
} 
: JIT 컴파일러 대신 비교하는 일련의 효율적인 해시 테이블 조회로 변환 당신이 준 예에 따라 어쨌든

는, 스위치 블록, 그래서 그냥 이렇게, 가장 성능이 좋은 것

또한 switch 블록은 더 컴팩트 한 코드를 의미합니다.

+0

또한 열거 형에서 +1을하면 가독성과 유지 관리가 향상됩니다. 그것은 작은 성능 향상에 비해 프로그램을 훨씬 개선 할 것입니다. – Turnkey

+2

명령과 동작의 정적 사전을 설정할 수 있습니다. 그리고 나서'GetValue'는 간단한 사전 검색이됩니다. –

+0

@Dai 감사합니다. 다중 스레드 프로그램에서 매개 변수가있는 스레드 반환하려면이 작업을 수행하고 있습니다. Woul 당신은 멀티 CS 파일을 swithc하는 것이 좋습니다? –

3

이것은 패러다임 문제만큼 성능 문제는 아닙니다.

C#에서 메서드는 작업을 캡슐화해야합니다. 여기에있는 것은 서로 관련이없는 태스크의 메트릭 보트로드입니다. 그것은 하나의 방법으로되어서는 안됩니다. 앞으로이 방법을 유지하려고한다고 상상해보십시오. 이것을 디버깅하려한다고 상상해보십시오. 각 비트가 호출 될 때 메소드에있는 곳이 궁금합니다.

퍼포먼스가 아무런 효과가 없을지라도, 이것을 나누면 인생이 훨씬 쉬워집니다.

1

성능면에서 별개의 방법이 더 나을 지 모르지만 차이점을 알아야 할 가능성은 거의 없습니다. 그러나 별도의 메서드를 사용하면 훨씬 더 중요한 가독성을 확실히 향상시킬 수 있습니다.

+0

더 많은 50.CS 파일이 더 많은 크기의 EXE를 생성해야합니까? –

+1

@RicardoPolo 중요한 EXE 부분이 아닙니다. 더 많은 심볼을 얻을 수 있지만 실행 코드 자체가 더 짧을 것입니다. – dasblinkenlight

관련 문제