2012-05-14 41 views
0

這可能是一個愚蠢的問題,但是說我想在我的ASP .NET應用程序中從OnSelectedIndexChanged事件中獲得兩個值。
哪個更好?哪個更好?它甚至重要嗎?

var personId = Convert.ToInt32(((GridView)sender).SelectedDataKey.Values["PersonId"]); 
var name = ((GridView)sender).SelectedDataKey.Values["Name"].ToString(); 

OR

var gView = (GridView)sender; 
var personId = Convert.ToInt32(gView.SelectedDataKey.Values["PersonId"]); 
var name = gView.SelectedDataKey.Values["Name"].ToString(); 

鑄造是否在GridView兩次做出多大的差別至於速度去?如果我拉更多的價值呢?是否有其他一些

+2

*「哪個更好?它有沒有關係?」*不,絕對不會。相信你的編譯器就像這樣的微型優化。 –

+1

_「這可能是一個愚蠢的問題」_是的,它是。 –

回答

5

後者(投一次)會稍快。我也更喜歡它的可讀性。性能差異非常小,以至於在這種情況下真正考慮它很可能是毫無意義的微觀優化。

2

不是鑄造更好。理論上,它在實踐中速度更快並不重要。但是,您曾經投過一次結果會產生更清晰的代碼。

1

我會選擇不施放超過我需要的。在這種情況下,性能不會有太大影響,但更容易遵循。

3

編譯器會爲您優化。爲了可讀性,我更喜歡第二個。

+0

也許JIT會,但寫的IL代碼實際上保留了兩個單獨的演員(使用ILSpy驗證)。我想知道JIT是否能夠 - 如果發送者對象在這兩行代碼之間發生了變化,該怎麼辦?在這樣一個簡單的例子中,除了線程外,我們可以看到它不會,但總的來說,它可能會發生。 –

+1

不在發佈模式下的Visual Studio 2010上。不要在沒有測試的情況下提出這樣的聲明(並指定* what * compiler)。 –

0

鑄造兩次花費多於鑄造一次。
有一個選項,編譯器在兩種情況下都會輸出相同的.dll,這意味着它已經爲您優化了它 - 特別確保 - 用第一個選項編譯並保存獲得的.DLL,然後使用第二選擇。
比較兩個.DLL的大小 - 如果它是相同的 - 編譯器已經爲你優化了它,否則就去做第二個選擇,因爲它更易讀和更優化。

1

我幾乎沒有改善的第二個選項去,因爲一個鑄造性和可讀性,

var key = ((GridView)sender).SelectedDataKey; 
var personId = Convert.ToInt32(key.Values["PersonId"]); 
var name = key.Values["Name"].ToString(); 

而且這個代碼顯示意圖更好 - 你與DataKey在這裏工作,而不是與整個GridView控件,所以你不」 t需要保持對GridView對象的引用。

相關問題