2013-03-31 99 views
-3

我想在lambda表達式 中投射哪一個更快?在lambda表達式中表演性能

  var callObject = CallObjectHolder.Instance.Get(x => x.Log.Id.ToString() ==  ev.src_unique_id); 

   var callObject = CallObjectHolder.Instance.Get(x => x.Log.Id == System.Convert.ToDouble(ev.src_unique_id) 
); 
+0

你已經用兩種方式編寫了代碼。如果你想知道哪一個更快,*運行它們,然後你就會知道*。如果你有兩匹馬,想知道哪條更快,你會在互聯網上向陌生人展示馬匹的照片,並讓他們猜測,或者你會比賽嗎? –

回答

5

這取決於表達式發生了什麼。

如果您正在對數據庫進行調用,以便將表達式轉換爲SQL,那麼第二種方法會更快,因爲它只進行一次轉換,而不是轉換表中的每個值。

如果您正在查詢內存中的數據,則它們的性能大致相同。

雖然我有點擔心,但它看起來像是在使用浮點數作爲標識符,這會在某個時刻出現精度問題。浮點數不能精確表示所有數字,通常應避免比較浮點數的相等性。

+0

您應該使最後一段** **加粗**; p – leppie

+0

我可能會補充說第一種方法取消使用任何數據庫索引。而且我希望我能分別對你答案的兩個部分分別提出贊同! –

1

最快的方式將您的字符串轉換成一個雙once比較循環之前。

+0

是什麼讓你覺得有一個循環? –

+1

這是一個lambda表達式,它的意圖是在每個對象x上執行,直到找到一個適合該表達式的對象。沒有某種循環就會變得非常困難。至少它每x執行一次,即使它是手動展開的。 – nvoigt

1

只想在這裏添加我的2美分。當一個值類型被裝箱時,當將一個值類型轉換爲引用類型時,必須分配和構造一個新對象。字符串是一種引用類型,您將值類型轉換爲引用類型,因此包含了拳擊的成本。拆箱的成本較低,因爲您的對象已經分配了內存,您只需從堆中獲取值並將其放入值類型的堆棧即可。

Rest @Guffa已經闡明瞭比較運營商的選擇和成本。

+0

將數字轉換爲字符串時,會創建一個對象,但這不是因爲裝箱。該對象是轉換結果的字符串。 – Guffa