2013-08-06 99 views
0

爲了說明的目的,我製作了兩個功能。你能建議我哪一種更好?是否在if語句中聲明變量可以提高ASP.Net中的性能?

是否Test2性能更好,因爲它需要聲明較少的變量,因此可能會使用較少的系統內存?

Function Test1() 

    Dim PerformMethod_A As Boolean = True 
    Dim a = 1 
    Dim b = 2 
    Dim c = 3 
    Dim d = 4 
    Dim e = 5 
    Dim result 

    If PerformMethod_A Then 
     result = a + b 
    Else 
     result = c + d + e 
    End If 

    Return result 

End Function 

Function Test2() 

    Dim PerformMethod_A As Boolean = True 
    Dim result 

    If PerformMethod_A Then 
     Dim a = 1 
     Dim b = 2 
     result = a + b 
    Else 
     Dim c = 3 
     Dim d = 4 
     Dim e = 5 
     result = c + d + e 
    End If 

    Return result 

End Function 
+0

複製的[?應變量聲明總是被放置在循環外(http://stackoverflow.com/questions/3241483/should - 變量 - 聲明 - 永遠被放置 - 在一個循環外)等等。請自己研究一下。 – CodeCaster

+0

它自己運行每個人說100,000次,並比較結果 –

回答

1

如果你看看在IL中編譯的內容,你會發現它並沒有真正改變。所有局部變量實際上在IL中的方法頂部聲明,而不管它們在源中聲明的位置。

測試1:

// Method begins at RVA 0x2054 
// Code size 59 (0x3b) 
.maxstack 2 
.locals init (
    [0] int32 a, 
    [1] int32 b, 
    [2] int32 c, 
    [3] int32 d, 
    [4] int32 e, 
    [5] bool PerformMethod_A, 
    [6] object result, 
    [7] object Test1, 
    [8] bool VB$CG$t_bool$S0 
) 

的Test2:

// Method begins at RVA 0x209c 
// Code size 58 (0x3a) 
.maxstack 2 
.locals init (
    [0] bool PerformMethod_A, 
    [1] object result, 
    [2] object Test2, 
    [3] int32 a, 
    [4] int32 b, 
    [5] int32 c, 
    [6] int32 d, 
    [7] int32 e, 
    [8] bool VB$CG$t_bool$S0 
) 
+0

感謝馬修..它讓我很高興有這樣的CLEAR答案。 – lawphotog

3

此時,您正在執行性能增強。通過你所描述的問題陳述,任何一種方式都不會有明顯的差異。如果您在性能方面遇到問題,則需要先收集指標,以便您知道要調整哪些

閱讀these articles由Eric Lippert,他們會引導你。

+1

說沒有明顯的性能差異意味着有差異。如果僅僅因爲寄存器分配啓發式以特定的方式被搔癢,這是你無法可靠地控制的東西,那麼它們之間存在差異。我說的是,即使需要micro perf,移動變量聲明也是浪費時間。在這些變化上運行基準將會浪費更多的時間。 – Esailija

+0

@Esailija,完全同意。我想我想說的是,如果你甚至可以找到差異,那就沒有關係。 –

相關問題