2012-12-04 116 views
0

我有一個情況:我應該創建類還是創建?

我的東東做一類的東西。

什麼應該更efficiente,修改方法這樣witf國際單項體育聯合會或創建methos每個動作?

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

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


     } 

這個命令會有50多個。 在執行的性能和可執行文件的大小方面有什麼更好的?

+2

第一課:不要擔心性能,直到它真正成爲問題。針對您的特定問題的任何解決方案不會導致性能問題。 –

+1

爲了擴大西蒙懷特黑德所說的話,不用擔心可讀性。無論什麼時候編寫代碼,可讀性應該是你的首要關注點。 – ScottS

回答

4

在一個高層次的,它看起來像你想實現某種動態調度系統的?或者你只是想要執行沒有任何多態性的指定操作?很難說。

無論如何,根據您的例子中,開關塊將是最高效的,因爲JIT編譯器將其轉換成一個高效的哈希表查找,而不是一系列比較,所以才這樣做:

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(); 
    } 
} 

我還注意到,switch塊也意味着你得到更緊湊的代碼。

+0

還在枚舉上+1,以提高可讀性和可維護性。這對於任何小的性能增益都將大大改善程序。 – Turnkey

+2

你可以設置一個靜態的命令和動作字典,然後'GetValue'變成一個簡單的字典查找。 –

+0

@戴謝謝你。我這樣做是爲了在多線程程序中返回帶有參數的線程。你是否推薦使用Multple CS文件進行swithc? –

3

這不是一個性能問題,它更是一種範式問題。

在C#中,一個方法應該是一個任務的封裝。你在這裏得到的是一大堆任務,每個任務都是無關的。這不應該是單一的方法。想象一下,試圖在未來保持這種方法。想象一下,試圖調試這個,想知道每個位被調用時你在哪裏。

你的生活會容易得多,如果你拆了這一點,但性能可能會沒有什麼區別。

1

雖然不同的方法將幾乎肯定會在性能方面更好,這是極不可能的,你應該注意到其中的差別。但是,使用不同的方法肯定會提高可讀性,這是非常重要的。

+0

這個更多的50.CS文件是否應該創建更大尺寸的EXE? –

+1

@RicardoPolo不是EXE的重要部分:你可能會在那裏得到更多的符號,但是可執行代碼本身可能會更短。 – dasblinkenlight

相關問題