एक प्रोजेक्ट पर काम करते समय मैं कोड के निम्नलिखित भाग में भाग गया, जिसने प्रदर्शन ध्वज उठाया।foreach loop सूची प्रदर्शन अंतर
foreach (var sample in List.Where(x => !x.Value.Equals("Not Reviewed")))
{
//do other work here
count++;
}
मैं निम्नलिखित पाश करने के लिए मूल पाश की तुलना त्वरित परीक्षण के एक जोड़े चलाने का फैसला किया:
foreach (var sample in List)
{
if (!sample.Value.Equals("Not Reviewed"))
{
//do other work here
count++;
}
}
और भी में इस पाश फेंक दिया देखने के लिए कि क्या होता है:
var tempList = List.Where(x => !x.Value.Equals("Not Reviewed"));
foreach (var sample in tempList)
{
//do other work here
count++;
}
मैंने मूल सूची को 3 अलग-अलग तरीकों से भी पॉप्युलेट किया: 50-50 (इसलिए मूल्यों का 50% जहां "समीक्षा नहीं की गई" और शेष अन्य), 10-90 और 9 0-10। ये मेरे परिणाम हैं, पहले और आखिरी लूप अधिकतर समान हैं लेकिन दूसरा एक बहुत तेज है, खासकर 10-90 मामले पर। बिल्कुल क्यों? मैंने हमेशा सोचा Lambda
अच्छा प्रदर्शन था।
संपादित
count++
वास्तव में नहीं है क्या है पाश अंदर, मैं सिर्फ इतना है कि यहां प्रदर्शन के उद्देश्य से कहा, मुझे लगता है मैं का उपयोग किया है चाहिए "// यहाँ कुछ करना"
लगता है
संपादित 2
परिणाम हर एक 1000 बार चल रहा है:
यह देखना दिलचस्प होगा कि कैसे 'सूची। जहां (x =>! X.Value.Equals ("समीक्षा नहीं की गई"))। गणना() 'उन लोगों की तुलना में प्रदर्शन करती है। –
@ माइकप्रैकअप: या इससे भी बेहतर, 'List.Count (x =>! X.Value.Equals ("समीक्षा नहीं की गई")) ' –
क्या आपने यह सुनिश्चित किया है कि आपने इनमें से कोई भी [प्रदर्शन बेंचमार्क गलतियों] (http : //tech.pro/blog/1293/c-performance-benchmark-mistakes-part-one)? – Corak