LINQ क्वेरी आलसी हैं । इसका मतलब है कि कोड:
var things = mythings
.Where(x => x.IsSomeValue)
.Where(y => y.IsSomeOtherValue);
बहुत कम करता है। मूल गणना योग्य ( mythings
) केवल गणना की जाती है जब परिणामी गणना योग्य ( things
) का सेवन किया जाता है, उदाहरण के लिए एक foreach
लूप .ToList()
, या .ToArray()
।
यदि आप कॉल करते हैं things.ToList()
, तो यह आपके बाद वाले कोड के लगभग बराबर है, शायद एन्यूमरेटर्स से कुछ (आमतौर पर नगण्य) ओवरहेड।
इसी तरह, यदि आप एक फॉरेस्ट लूप का उपयोग करते हैं:
foreach (var t in things)
DoSomething(t);
यह प्रदर्शन के समान है:
foreach (var t in mythings)
if (t.IsSomeValue && t.IsSomeOtherValue)
DoSomething(t);
प्रगणकों के लिए आलस्य दृष्टिकोण के कुछ प्रदर्शन लाभ (जैसा कि सभी परिणामों की गणना करने और उन्हें एक सूची में संग्रहीत करने के लिए विरोध किया जाता है) यह है कि यह बहुत कम मेमोरी का उपयोग करता है (क्योंकि एक समय में केवल एक परिणाम संग्रहीत होता है) और इसका कोई महत्वपूर्ण प्रभाव नहीं है -सुंदर लागत।
यदि गणना करने योग्य केवल आंशिक रूप से गणना की जाती है, तो यह विशेष रूप से महत्वपूर्ण है। इस कोड पर विचार करें:
things.First();
LINQ को जिस तरह से लागू किया गया है, mythings
वह केवल पहले तत्व तक सीमित होगा जो आपकी शर्तों से मेल खाता है। यदि वह तत्व सूची में जल्दी है, तो यह ओ (एन) के बजाय एक विशाल प्रदर्शन को बढ़ावा देने वाला हो सकता है (जैसे ओ (1))।