2011-12-13 4 views
5

मैं डेटाग्रिड में लोड कर रहा हूं कुछ डेटा (1,200,000 पंक्तियां), और ऐप लोड करने में बहुत अधिक समय ले रहा है और कभी-कभी फ्रीज करता है।डेटा डेटा को एक डाटाग्रिड में असीमित रूप से लोड करें

मुझे नहीं पता कि उन्हें अतुल्यकालिक रूप से कैसे लोड किया जाए? (प्रगति के साथ शायद)।

क्या मुझे यहां कुछ मदद मिल सकती है?

उत्तर

3

छोटे लोड में डेटा लोडिंग को तोड़ें, एक समय में 100 से 1000 पंक्तियां कहें। यदि डब्ल्यूपीएफ ग्रिड आपके डेटा संग्रह में डाटाबेस है, और संग्रह एक अवलोकन संग्रह है (इनपुट इन्टोटिफ़ कोलेक्शन चेंज किया गया है), डब्ल्यूपीएफ डिस्प्ले को ऑटो अपडेट करेगा क्योंकि नए डेटा को संग्रह में जोड़ा गया है।

आपको पेजिंग डेटा स्रोतों के साथ वर्चुअलाइज्ड सूची नियंत्रण या ग्रिड का उपयोग करने पर भी विचार करना चाहिए, ताकि स्क्रीन पर वर्तमान में दिखाया गया डेटा लोड हो जाए (स्मृति में डेटा की 1.2 मिलियन पंक्तियों के बजाय)। यह आपके लिए "चंकिंग" करेगा और आपको मूल रूप से बहुत कम स्मृति उपयोग या नेटवर्क अंतराल के साथ उपयोगकर्ता को असीमित डेटा प्रस्तुत करने में सक्षम करेगा।

इस अतः एक आभासी लिस्टबॉक्स के लिए एसिंक्रोनस रूप से डेटा पुन: प्राप्त पर लेख चेक आउट: How do I populate a ListView in virtual mode asynchronously?

5

मैं जिसमें मैं बहुत थ्रेडिंग का उपयोग कर कुछ इसी तरह कर रहा हूँ एक आवेदन दिया है। इस कोड को एक समय में अपनी डेटाग्रिड एक पंक्ति को अपडेट करना चाहिए जबकि कोड पीछे चल रहा है।

using System.Windows.Threading; 

private void Run() 
{ 
    try 
    { 
     var t = new Thread(Read) { IsBackground = true }; 
     t.Start(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

private void Read() 
{ 
    foreach (/* whatever you are looping through */) 
    { 
     /* I recommend creating a class for the result use that for the 
      datagrid filling. */ 
     var sr = new ResultClass() 

     /* do all you code to generate your results */ 

     Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
           (ThreadStart)(() => dgResults.AddItem(sr))); 
    }  
} 
संबंधित मुद्दे