2010-10-28 12 views
16

मेरे पास सूची है जिसमें 150 के तत्व हैं। काम का औसत समय इंडेक्सऑफ() (4) से 4 गुना कम है। मैंने int की सूची का उपयोग करने की कोशिश की। स्ट्रिंग्स इंडेक्स की सूची के लिए थोड़ा तेज है।सूची <T> क्यों है IndexOf() सूची <T> से बहुत तेज है।()?

मुझे केवल एक मुख्य अंतर मिला, यह विशेषता लक्षित हैचिंगऑप्टऑट। MSDN बताता है:

इंगित करता है कि जो करने के लिए इस विशेषता लागू किया जाता है .नेट फ्रेमवर्क वर्ग पुस्तकालय विधि सर्विसिंग रिलीज से प्रभावित होने की संभावना नहीं है, और इसलिए मूल छवि जेनरेटर (NGen) छवियों भर में inlined किए जाने योग्य है।

क्या यह विशेषता इस तरह के व्यवहार का कारण हो सकती है? और विधि क्यों नहीं है() में ऐसी विशेषता है?

अग्रिम धन्यवाद।

संपादित करें:

List<int> list = CommonHelper.GetRandomList(size); 

long min = long.MaxValue; 
long max = 0; 
long sum = 0; 

foreach (var i in list) 
{ 
    m_stopwatch.Reset(); 
    m_stopwatch.Start(); 
    list.Contains(i); // list.IndexOf(i); 
    m_stopwatch.Stop(); 

    long ticks = m_stopwatch.ElapsedTicks; 

    if (ticks < min) 
     min = ticks; 

    if (ticks > max) 
     max = ticks; 

    sum += ticks; 
} 

long averageSum = sum/size; 

संपादित करें 2:

मैं एक ही लिखा है

मैं इस तरह कोड कुछ है इंडेक्सऑफ() के रूप में कोड और यह कंटेनर() से धीमा काम करता है।

+1

इस मामले में डेटा क्या है की एक 150k आकार सेट के साथ कुछ अंतर का कारण हो सकता? –

+0

और नहीं - मुझे नहीं लगता कि विशेषता के साथ इसके साथ कुछ लेना देना है। –

+0

मैं int और स्ट्रिंग का उपयोग करता हूं, व्यवहार समान है। –

उत्तर

4

वे एमएसडीएन प्रविष्टियों के मुताबिक समानता को थोड़ा अलग तरीके से निर्धारित करने के तरीके पर पहुंचते हैं। इन प्रविष्टियों में से प्रत्येक के 'टिप्पणी' के तहत देखो:

List<T>.IndexOfEqualityComparer<T>.Default http://msdn.microsoft.com/en-us/library/e4w08k17.aspx

List<T>.Contains का उपयोग करता IEquatable<T>.Equals http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx

का उपयोग करता है भले ही वे अंत एक ही विधि बुला बहुत अंत में समानता निर्धारित करने के लिए (जैसा कि निश्चित रूप से यहां मामला है), वे वहां पहुंचने के लिए अलग-अलग मार्ग ले रहे हैं, ताकि शायद 'इसे विभाजित कर सके।

को देखते हुए "4x अंतर" वास्तविक मामले होने के लिए नहीं लगता है कि, कुछ बंद हाथ मुक्केबाजी विशेष रूप से डेटा

+0

दिलचस्प। इस अंतर के पीछे तर्क क्या है? – Thilo

+0

मैं वास्तव में ऑफहैंड नहीं जानता; असल में, ऐसा लगता है कि वे अलग होंगे, मैं लगभग यह देखने के लिए जांच नहीं करता था कि वे समानता का परीक्षण करने के लिए किस तरीके का इस्तेमाल करते थे। –

+0

क्या आप 'IEquatable' को तेज होने की अपेक्षा नहीं करेंगे? एक्स 4 का अंतर भी काफी लगता है। – Kobi

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