2012-01-26 42 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#中的性能問題嗎?

不,他們不會。

編譯器是足夠聰明的,當你在Release模式編譯刪除所有不必要的東西和優化您的代碼:

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說的那樣,上面的編譯器會爲我們的代碼優化機器執行。

相關問題