2012-12-07 28 views
21

मेरे .NET 3.5WPF एप्लिकेशन में, मेरे पास WPFDataGrid है जो 500 कॉलम और 50 पंक्तियों के साथ पॉप्युलेट किया जाएगा। ऐप का प्रदर्शन स्क्रॉलिंग में बहुत खराब है, या जब मैं DataGrid.Items.Refresh() या पंक्तियों का चयन करने में करता हूं।WPF DataGrid प्रदर्शन में सुधार

वास्तव में ऐप अपडेट लेआउट में लगभग 20 सेकंड लेगा। Layout_Updated() घटना 20 सेकंड के बाद ट्रिगर होगी।

यदि मैं कॉलम को 50 या उससे कम तक कम करता हूं, तो ऐप बहुत उत्तरदायी होगा। मेरे निष्कर्ष प्रदर्शन के अनुसार सीधे कॉलम गिनती से संबंधित है।

मैं DataGrid प्रदर्शन में सुधार कैसे करूं?

+6

एक ग्रिड और अधिक है कि 10 कॉलम भी एक अच्छा विचार नहीं हो सकता है। लेकिन 'कस्टम पेजिंग' – Boomer

+4

पर विचार करें @ वास्तव में बूमर? कभी विदेशी मुद्रा ग्रिड देखा? – TomTom

+0

@WPFK क्या आपने तीसरे पैरा का उपयोग करने के लिए माना है टाई ग्रिड जो प्रदर्शन के लिए अनुकूलित है? – TomTom

उत्तर

57

कुछ ही विकल्प है कि आप अपने डेटा ग्रिड पर आप वस्तु

EnableColumnVirtualization = true 
EnableRowVirtualization = true 

ये मदद करने के लिए चालू कर सकते हैं कर रहे हैं की इस कोशिश दो मुख्य हैं जो मुझे लगता है कि मदद कर सकते हैं। इसके बाद आपके बाध्यकारी async

ItemsSource="{Binding MyStuff, IsAsync=True}" 

और अंत में, मैंने सुना है कि एक अधिकतम ऊंचाई और चौड़ाई की स्थापना अधिकतम स्क्रीन आकार ऊपर भले ही यह मदद कर सकते हैं बनाने का प्रयास करें, लेकिन मैं एक अंतर अपने आप को नोटिस नहीं किया था (दावा किया था ऑटो आकार को मापने के साथ क्या करना)

MaxWidth="2560" 
MaxHeight="1600" 

इसके अलावा कभी नहीं एक ScrollViewer में एक DataGrid डाल दिया, क्योंकि आप अनिवार्य रूप से वर्चुअलाइजेशन खो देंगे। मुझे बताएं क्या इससे मदद मिलती है!

+0

स्क्रॉल करते हैं, मुझे नहीं लगता कि EnableColumnVirtualization और EnableRowVirtualization .NET 4.0 तक उपलब्ध हैं। तो पहले सुझावों को देखने से पहले ओपी को 3.5 से अपग्रेड करना होगा। – Scott

+0

@ स्कॉट वैसे यह एक उचित समाधान हो सकता है। ओपी के लिए, आप .NET 3.5 का उपयोग क्यों कर रहे हैं? .NET 4.0 XP SP3 पर उपलब्ध है और कई तृतीय पक्ष पुस्तकालयों को पहले से ही .NET 4.0 की आवश्यकता होती है यदि आप उनका उपयोग करना चाहते हैं। – Alan

+0

@ एलान ग्रेट मैन !!! इससे बहुत मदद मिली ... – Kishor

0

हो सकता है कि बजाय एक बार

में सभी 50 पंक्तियों लोड हो रहा है http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization

+0

सुझावों के लिए धन्यवाद। लेकिन एक बार में 500 कॉलम होने की मेरी आवश्यकता है। – Kishor

+1

अच्छी तरह से आपने स्क्रॉलिंग कहा था, इसलिए मैंने सोचा था कि आप एक ही समय में सभी पंक्तियों को प्रदर्शित नहीं करते हैं (आप 500 कोल्स के साथ वैसे भी कैसे करते हैं) डेटा वर्चुअलाइजेशन के साथ विचार यह है कि आप अपनी ग्रिड को पॉप्युलेट करने के लिए एक निश्चित संख्या लोड करते हैं और फिर पंक्तियां हटाते हैं और प्रतिस्थापित करते हैं जैसा कि आप – Constanta

0

IsAsync = सच} "तेजी से इस बयान उपयोग करने के बाद, आवेदन कम समय में रिकॉर्ड के बहुत सारे को हासिल करेगा है, यह मेरे लिए काम किया ...

+1

IAsync = सच कहां? क्या? बिल्कुल अस्पष्ट –

+0

आगे देखो यह कहता है "आइटमसोर्स =" {बाध्यकारी MyStuff, IsAsync = True} "" – Sam

1

चेक, अगर आप संपत्ति ScrollViewer.CanContentScrollFalse निर्धारित किया है। इस गुण को सेट झूठ को अक्षम करने के लिए वर्चुअलाइजेशन आपके डेटा-ग्रिड के प्रदर्शन को कम कर देगा। अधिक स्पष्टीकरण के लिए यह CanContentScroll