2010-09-22 16 views
7

मुझे लगता है कि शीर्षक मेरे प्रश्न को बहुत अधिक कैप्चर करता है, लेकिन पृष्ठभूमि का थोड़ा सा अनुसरण करता है:बाध्यकारी सूची क्यों नहीं है (टी) में AddRange सदस्य है?

जब कोई रूप मैंने लोड किया है तो यह बाध्यकारी सूची में कुछ हज़ार (30k विषम) वस्तुओं को जोड़ता है। जब मेरा एप्लिकेशन पहली बार लोड होता है तो यह ऑब्जेक्ट्स की सूची के माध्यम से लूप करने के लिए कई सेकंड (मेमोरी से लगभग 10 या उससे अधिक) लेता है और इसे एड फ़ंक्शन का उपयोग करके बाइंडिंगसोर्स में जोड़ता है। हालांकि, जब यह लोड करने के लिए उसी कोड के साथ बाद के रूपों पर होता है तो इसे केवल दो या दो लेते हैं।

तो मेरे प्रश्न होंगे:
1. क्यों बाध्यकारी सूची (टी) में AddRange सदस्य नहीं है?
2. प्रारंभिक और बाद में जोड़े एक AddRange फ़ंक्शन के साथ तेज होंगे?
3. कोई भी विचार क्यों कोड का एक संस्करण समान संस्करणों से धीमा चलता है?

किसी भी मदद के लिए धन्यवाद जो आप प्रदान करने में सक्षम हो सकते हैं।

+0

क्या आवेदन लोड होने पर फॉर्म लोड किया जा रहा है? क्या यह संभवतः धीमेपन का कारण है? –

+1

खैर के बाद बहुत समय मैं अंत में नीचे नज़र रखी है एक (यकीन नहीं करता है, तो यह केवल है) DataGridView DefaultRowTemplate ContextMenuProperty को मुद्दा। जब यह सेट कर दिया जाता है, यह जब मैं अंतर्निहित BindingSource में आइटम जोड़ने के समय की एक पर्याप्त राशि कहते हैं। – ChrisAU

+1

भविष्य में संदर्भ के लिए मैं इस http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx सामने आने वाले का उपयोग कर "शॉर्टकट मेनू कुशलता का उपयोग करना"। मैंने इस सबक को कड़ी मेहनत से सीखा है। – ChrisAU

उत्तर

0

From the OP:

खैर के बाद बहुत समय मैं अंत में नीचे नज़र रखी है एक (यकीन नहीं करता है, तो यह केवल है) DataGridView DefaultRowTemplate ContextMenuProperty को मुद्दा। जब यह सेट किया जाता है, तो यह अंतर्निहित बाइंडिंग स्रोत में आइटम जोड़ते समय काफी समय जोड़ता है।

भविष्य में संदर्भ के लिए मैं का उपयोग कर "शॉर्टकट मेनू का उपयोग कुशलतापूर्वक" इस msdn.microsoft.com/en-us/library/ha5xt0d9.aspx भर में आ गए हैं। मैंने इस सबक को कड़ी मेहनत से सीखा है।

उपरोक्त आलेख में एमएसडीएन लिंक प्रत्येक सेल में एक शॉर्टकट मेनू का उपयोग करने की सिफारिश करता है, खासकर टेम्पलेट में शॉर्टकट मेनू डालकर। इसके बजाए, उपयोगकर्ता को या तो पूरे नियंत्रण के लिए एक शॉर्टकट मेनू बनाना चाहिए या CellContextMenuStripNeeded या RowContextMenuStripNeeded ईवेंट को संभालना चाहिए।

1

मुझे यकीन नहीं है कि क्यों कोई AddRange विधि उपलब्ध नहीं है। आप आसानी से एक विस्तार विधि के रूप में अपना खुद का लिख ​​सकते हैं:

/// <summary> 
    /// Adds all the data to a binding list 
    /// </summary> 
    public static void AddRange<T>(this BindingList<T> list, IEnumerable<T> data) 
    { 
     if (list == null || data == null) 
     { 
      return; 
     } 

     foreach (T t in data) 
     { 
      list.Add(t); 
     } 
    } 
संबंधित मुद्दे