2011-11-09 24 views
26

मैं Linq में और क्या प्रदर्शन के लिए बातसी # Linq कहाँ (अभिव्यक्ति) .FirstorDefault() बनाम .FirstOrDefault (अभिव्यक्ति)

var result = ResultLists().Where(c=> c.code == "abc").FirstOrDefault(); 
vs 
var result = ResultLists().FirstOrDefault(c => c.code == "abc"); 
+2

कोड समेकन के लिए 2 का उपयोग करें .. – nawfal

उत्तर

5

दूसरा एक का उपयोग करने के दुविधा में बहुत नया हूँ। अन्य सभी चीजें बराबर होती हैं, दूसरे मामले में इटेटरेटर जैसे ही यह एक मैच पाता है, जहां पहले व्यक्ति को वह मैच मिलना चाहिए, और फिर उनको पहले चुनें।

+4

मेरा मानना ​​है कि 'कहां' परिणाम "प्रक्षेपण" या "आलसी गणनात्मक अनुक्रम" में होता है (जबकि थोड़ा अधिक ओवरहेड हो सकता है, इसे किसी और तत्व से ' परिणाम सूची ', अंतिम नोट देखें), लेकिन मैं बाद में ज्यादातर मामलों में चुनता हूं .... LINQ2SQL या इसी तरह के मामले में, मुझे नहीं पता कि क्वेरी जनरेटर क्या करेगा। –

+5

सच नहीं है - LINQ का चेनिंग व्यवहार का अर्थ है कि यह आलसी ढंग से पुनरावृत्त होता है। दोनों दृष्टिकोणों के लिए यदि पहला आइटम एक मैच है तो वे आगे नहीं जाएंगे। – Enigmativity

+3

@ निष्क्रियता: यह सभी लिंक प्रदाताओं के लिए सच नहीं है। हालांकि लिंक से ऑब्जेक्ट्स के लिए यह सच है, एसक्यूएल अंडरपिनिंग के आधार पर प्रदाताओं को पहले ऑब्जेक्ट को वापस करने से पहले पूरे सेट को वापस (या कम से कम प्रोसेस) करना होगा। निचली पंक्ति यह है कि कुछ प्रदाताओं द्वारा अंतर्निहित अनुकूलन के बावजूद, क्योंकि आप सभी मामलों में यह सच होने पर भरोसा नहीं कर सकते हैं, यह बेहतर है कि अवधारणात्मक रूप से हमेशा सही व्यवहार क्या होगा, अन्य सभी चीजें बराबर होंगी। –

17

या तो ठीक है।

वे दोनों lazily चलाने - तो दोनों ही स्रोत से 10 आइटम पुनरावृति जाएगा यदि स्रोत सूची एक लाख आइटम है, लेकिन दसवें आइटम से मेल खाता है।

प्रदर्शन लगभग समान होना चाहिए और कोई फर्क पूरी तरह से नगण्य होगा।

+1

कोई फर्क नहीं पड़ता ** महत्वहीन ** - प्रति दिन 500 उपयोगकर्ताओं द्वारा बुलाए गए हजारों आइटमों में 1 एमएमएस बहुत समय तक जोड़ता है। – TheGeekZn

+4

@NewAmbition - आप एक दिन से भी कम प्रतिशत बात कर रहे हैं। यह बहुत समय नहीं है। जब मैं दो दृष्टिकोणों की तुलना करता हूं तो अंतर मुझे 150,000 से अधिक वस्तुओं (प्रत्येक आइटम के लिए 1ms नहीं, यह 150,000 के लिए 1ms) के लिए 1 एमएमएस के लिए काम कर रहा है। तो उस पर आधारित 500 x 1,000 आइटम क्वेरी जो प्रति दिन लगभग 0.003ms है। यह महत्वपूर्ण नहीं है। – Enigmativity

+4

मैंने सोचा था कि शब्द इटैलिक होगा, बोल्ड नहीं: | आप सही हैं, हालांकि मैं एक फुलाया उदाहरण का उपयोग कर रहा था। मैं डौची आवाज करने का इरादा नहीं था, बस कभी-कभी छोटे प्रदर्शन हिट जोड़ सकते हैं :) – TheGeekZn

संबंधित मुद्दे