2009-04-15 32 views
1

回到我發現像這樣的代碼在一個項目我工作的性能/風格問題有關從方法/函數

public SqlDataReader SomeMethod(int someParam) 
{ 
     // ... some code goes here 
     SqlDataReader dataReader = m_command.ExecuteReader(CommandBehavior.CloseConnection); 
     return dataReader; 
} 

我想知道什麼是更好的,原來還是低於

public SqlDataReader SomeMethod(int someParam) 
{ 
     // ... some code goes here 
     return m_command.ExecuteReader(CommandBehavior.CloseConnection); 
} 

創建變量然後返回它有什麼好處,而不是僅僅返回創建的讀取器?我會認爲不,因爲它只是一個參考。我給出的例子是我發現的,但它可以是任何可變類型。我可以想到的一件事是在調試過程中,可能很高興看看變量中的內容。

有人願意貢獻他們的2美分嗎?

回答

2

調試可能是最好的原因。第一種方式,比較容易在返回之前檢查dataReader是否爲null。就像你說的那樣,真的不應該有性能差異。如果經常調用此方法,則JIT編譯器(如果啓用)很可能會優化本地變量。

+0

但至少對於CLR,您沒有關閉JIT的選項。 – MichaelGG 2009-04-16 00:45:15

+0

這是標記語言不可知的,所以我不想讓我的答案C#特定。該代碼也可以是有效的Java。 – 2009-04-16 12:27:01

1

任何half-decent編譯器都會優化第一個示例,以便dataReader不需要存儲在臨時變量中。換句話說,這兩個例子應該具有完全相同的效率。

就個人而言,我更喜歡第二個(較短的)例子,因爲將這條線分成兩行並不能簡化閱讀。