2011-01-05 17 views
5

मुझे लगता है कि मुझे 10 से कम कॉलम के स्ट्रिंग ग्रिड का उपयोग करना पड़ सकता है, लेकिन लगभग 50k पंक्तियां।बड़े स्ट्रिंग ग्रिड को कैसे संभालें?

प्रयोगों ने इसे एक बहुत ही अनुत्तरदायी सीपीयू हॉग दिखाया है।

कोई बात नहीं?

कोड या घटक?

पसंदीदा डेल्फी (7) बिल्ड या टीएमएस (जिसके लिए मेरे पास लाइसेंस है) या एफओएसएस (वाणिज्यिक उपयोग के लिए)।


अद्यतन: बस मुझे मत बताओ कृपया, वर्चुअल ट्री दृश्य का उपयोग करने के आदि कृपया मुझे बताओ क्यों, ताकि मैं कुछ सीख सकते हैं। धन्यवाद।

+1

यदि आपको पता नहीं है कि आपका कोड धीमा क्यों है, तो आपको कुछ कोड पोस्ट करना चाहिए। –

+1

पहले, आपको 50k पंक्तियों को लोड करने के लिए "आवश्यकता" क्यों है, आप केवल स्क्रीन पर लगभग 25-50 प्रदर्शित कर सकते हैं? दूसरा आपने हमें यह नहीं बताया है कि आपकी प्रणाली (या आभासी मशीन) कितनी मेमोरी है और कितनी 50k पंक्तियां खाती हैं, अगर इसे सिस्टम मेमोरी से अधिक की आवश्यकता होती है तो "वर्चुअल मेमोरी" खेल में आ जाएगी और एचडीडी (या शायद , शायद आपका एसएसडी) जो रैम की तुलना में वा-हा-घास धीमा है। मेरी टिप्पणी को हमले के रूप में न लें, मैं समझने की कोशिश कर रहा हूं कि आपकी समस्या क्या है। – ComputerSaysNo

+0

एक उचित पर्याप्त सवाल +1। मैं केवल 20-50 पंक्तियों को अस्वीकार कर सकता हूं, लेकिन मुझे कहीं भी डेटा की आवश्यकता है। माईब मैं इसे स्ट्रिंग ग्रिड की बजाय डीबी में डाल सकता हूं, या शायद मैं अपने प्रोग्राम में रखना चाहता हूं, और डीबी का उपयोग नहीं करना चाहता हूं। किसी भी मामले में, मेरे पास डेटा के दो सेट होंगे - स्ट्रिंग ग्रिड जहां मैं 50 पंक्तियां रखता हूं और कहीं भी जहां मैं बाकी (या सभी) रखता हूं, और वाउडल को सिंक करने के लिए कुछ मुश्किल कोड की आवश्यकता होती है। अच्छी तरह से एक बिंदु बनाया, जो दर्शाता है कि मैं इस सवाल क्यों पूछ रहा हूं। – Mawg

उत्तर

5

मुझे नहीं लगता कि समस्या इस नंबर को TStringGrid में जोड़ने से आई है।

100k पंक्तियों को जोड़ने से 1 सेकंड (700 मिमी) (उच्च अंत पीसी नहीं, केवल दोहरी कोर) लिया गया।

procedure TForm1.btn1Click(Sender: TObject); 
Const 
    arr : array[1..5] of string = ('One','Two','Three','Four','Five'); 
    Rows = 100000; 
var 
    I: Integer; 
    F,E : Integer; 
begin 
    StringGrid1.RowCount := Rows; 
    F := GetTickCount; 
    for I := 0 to Rows do 
    begin 
    StringGrid1.Cells[1,I] := Arr[1] + IntToStr(I); 
    StringGrid1.Cells[2,I] := Arr[2]+ IntToStr(I); 
    StringGrid1.Cells[3,I] := Arr[3]+ IntToStr(I); 
    StringGrid1.Cells[4,I] := Arr[4]+ IntToStr(I); 
    StringGrid1.Cells[5,I] := Arr[5]+ IntToStr(I); 
    end; 
    E := GetTickCount; 
    ShowMessage(Inttostr(E-F)); 
end; 

मुझे लगता है कि आपके कोड में धीमापन, क्या आप डेटाबेस से डेटा लाते हैं? यदि ऐसा है तो यह आपके कोड की बाधा होगी, "खराब अभ्यास" नामक उपयोगकर्ताओं के लिए दिखाने के लिए WHETVER GRID को 50k जोड़ना भी शामिल है।

और यह कहना मुश्किल है कि यह कोई कोड दिखाए बिना धीमा क्यों है।

+1

50K पंक्तियां ठीक हैं अगर ग्रिड में कुछ प्रकार का फ़िल्टरिंग बनाया गया है। यह हमेशा बैकएंड पर फ़िल्टरिंग करने का सबसे अच्छा/सबसे प्रदर्शन करने वाला समाधान नहीं है, उदाहरण के लिए ओलाप/क्यूब सोचें। – mjn

+1

@mjn, आप सही हैं, लेकिन उनके प्रश्न वह सामान्य स्ट्रिंगग्रिड या टीएमएस में 50k जोड़ने के बारे में पूछते हैं, जिन्हें वे ओलाप/क्यूब्स कार्यों से संबंधित नहीं हैं। कोडिंग के लिए –

+0

+1 धन्यवाद (इच्छा है कि मैं +1 से अधिक दे सकता हूं)। मुझे लगता है कि मेरी समस्या एक डीबी के साथ एक गैर डीबी-जागरूक स्ट्रिंग ग्रिड का उपयोग कर सकती है। लेकिन एक डीबी जागरूक ग्रिड का उपयोग करना चीजों को इतना बेहतर बना देगा, या फिर भी यह बहुत धीमा होगा? क्या लोगों को आम तौर पर 50k पंक्ति स्ट्रिंग ग्रिड के साथ समस्या होती है या नहीं? – Mawg

3

आप वर्चुअल Treeview है, जो उच्च मात्रा के लिए बनाया गया है को देखने के लिए चाहते हो सकता है: http://www.delphi-gems.com/index.php?option=com_content&task=view&id=12&Itemid=38

+0

+1 डियरियन, मैं क्षमा चाहता हूं। ऐसा लगता है कि मैंने आपकी पोस्ट के प्रति जवाब में प्रश्न अपडेट किया है, जिसे आप अपमानित कर सकते हैं। असल में, यह मेरे लिए हुआ कि कुछ लोग बस एक रेजोन के बिना "एक्स का उपयोग करें" कह सकते हैं, जो मुझे और अन्य लोगों को कम मदद की है जो इस प्रश्न को पढ़ते हैं (अगर हम समझ गए तो यह मददगार होगा)।जब तक मैंने प्रश्न संपादित नहीं किया था तब तक मैंने आपका जवाब नहीं देखा (और आपने कहा था कि यह उच्च मात्रा के लिए बनाया गया है)। – Mawg

+0

थांस्क, डैरियन, मैंने इसके बारे में अच्छी चीजों की खोज की और पढ़ा था, लेकिन इसे चेक नहीं किया था क्योंकि इसे ट्री व्यू कहा जाता है और मैं एक ग्रिड चाहता था - मुझे और मूर्ख बनाओ। – Mawg

+1

+1 मैं कहूंगा कि वर्चुअल ट्री व्यू आपको सबसे अच्छा मिल सकता है। यदि आप सॉफ़्ट रत्न वेबसाइट पर स्क्रीनशॉट की जांच करते हैं तो आप स्ट्रिंग ग्रिड व्यू सहित इस घटक के विभिन्न "प्रदर्शन मोड" देख सकते हैं। –

5

आभासी मोड में TListView घटक अक्सर सिफारिश की है (मैं इसे अपने आप प्रयास नहीं किया है, लेकिन यह नहीं बल्कि लागू करना आसान लगता है)

+0

+1 धन्यवाद। मैं उस – Mawg

4

यदि आप वर्चुअल ट्रीव्यू में रुचि रखते हैं तो आपको http://code.google.com/p/virtual-treeview/source/checkout से पूरे वर्चुअल ट्रीव्यूव ट्रंक को चेकआउट करना चाहिए। आपको डेमो \ उन्नत उपनिर्देशिका मिलेगी जहां डेमो एप्लिकेशन वर्चुअल ट्रीव्यू कार्यक्षमता दिखा रहा है, उदाहरण के लिए वर्चुअल ट्रीव्यूव को ग्रिड के रूप में कैसे उपयोग करें।

आपको Googlecode से कोड चेकआउट करने के लिए एसवीएन की आवश्यकता है। यदि आपने कभी भी एसवीएन डाउनलोड का उपयोग नहीं किया है और TortoiseSVN

+0

+1 में देखता हूं धन्यवाद, यह बहुत उपयोगी है। मैं जिस तरह से जाऊंगा – Mawg

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