2011-11-01 19 views
8

जब मैं एक उत्तरदायी यूआई बनाना चाहता हूं तो मुझे कुछ टिप्स पसंद आएंगे।उत्तरदायी यूआई टिप्स

मुझे पता है कि उपयोग करने के लिए:

Dispatcher 
Task 
BackgroundWorker 
Threads 

मैं अधिक अग्रिम सुझावों रहा हूँ, टिप्स बंधन की तरह ... जब मैं अपने यूआई को अपडेट करना होगा कि पर 50 + नियंत्रण है।

PriorityBinding 
Populating ComboBoxes 
Populating ListBoxes, ListViews 

जब पृष्ठभूमि में डेटा संसाधित ... सर्वश्रेष्ठ अभ्यास हो सकता है जब यह लंबी चलने वाली प्रक्रिया की बात आती है।

मेरा यूआई 100% उत्तरदायी बनाने के लिए मैं और क्या कर सकता हूं।

उत्तर

16
  1. FastObservableCollection

  2. PresentationSource

  3. से छेड़छाड़ AsQueryable() एकल थ्रेड से डेटा स्रोतों की गतिशील छानने के लिए उपयोग कर और थ्रेड नास्तिक CollectionView द्वारा PLinq या Linq से अधिक थ्रेड पर उपयोग करना।

  4. एनीमेशन

  5. गैर आभासी पैनल के Vitualization कैनवास

  6. स्क्रॉल एनिमेशन के लिए

  7. Trigger.Exnter \ बाहर निकलें कार्रवाई स्थगित की तरह अधिक

    रेडीमेड Gifs

  8. BeginStoryboard.HandoffBehavior = "लिखें"

  9. सॉफ्टवेयर त्वरण से अधिक हार्डवेयर का उपयोग करना।

  10. WindowStyle=None, AllowTransparency=true, Background=Transparent से बचना, TileMode

  11. कॉन्फ़िगर RenderOptions.BitmpaScalingMode LowQuality के रूप में और सक्षम कैशिंग। PresentationFontCache विंडोज सेवा सक्षम करें।

  12. उपयोग StaticresourcesDynamicresources से अधिक

  13. दाय निर्भरता गुण से बचें। संपत्ति में भारी संचालन से बचने के लिए कॉल बैक बदल गया।

  14. फ्रीज़ेबल ब्रश का उपयोग करें। x:Name/Namescoping/Binding से उनके Color संपत्तियों से उन्हें हर समय फ्रीज करने योग्य से बचें।

  15. सीमा की पृष्ठभूमि सेट करें, अगर यह दृश्य की पृष्ठभूमि को सेट करने से दृश्य को समाहित करता है। इसी तरह यदि आपने Brush को विज़ुअल की पृष्ठभूमि के रूप में सेट किया है तो Brush.OpacityVisual.Opacity से निर्दिष्ट करें।

  16. वैल्यू कन्वर्टर्स में न्यूनतम कोड होना चाहिए। जहां भी लागू हो Binding.IsAsync और PriorityBinding का उपयोग करें।

  17. ExpandersIsExpanded=False डिफ़ॉल्ट रूप से IsExpanded=False का उपयोग करें।

  18. CompositionTarget.Rendering प्रत्येक प्रतिपादन चक्र पर आग लगती है, इसलिए केवल तभी उपयोग की जानी चाहिए। किसी भी अवसर पर इसे हटा दें।

  19. WPF DataGrid कॉम्बो बक्से में कॉलम और संपादन योग्य टेम्पलेट कॉलम का भारी इस्तेमाल से बचना चाहिए के रूप में combobx टेम्पलेट्स चयनित मान लोड और वास्तव में से प्रत्येक बता गया और टेम्पलेट कॉलम आइटम स्रोत से यह खोज के द्वारा प्रदर्शन सदस्य पथ का उपयोग करने का प्रयास करें अत्यधिक अवलोकन संग्रह के साथ प्रयोग किया जाता है।

  20. उपयोग WPF Extedned Tooklit आधारित Shader प्रभाव और इस तरह धुंधला, छाया के रूप में नई पिक्सेल Shader एपीआई ।

और कई और अधिक ...

+0

बहुत उपयोगी। थक्स एंजेल =) – Willem

+0

आखिरकार सभी बेहतरीन ग्राफिक्स को अक्षम करना और ऐप को पुराने स्टाइल जीतने की तरह दिखाना 32 ऐप :) –

0

एक यूआई पर 50+ नियंत्रण जैसे कि यह एक कोडर द्वारा डिज़ाइन किया गया था और कोड को अनुकूलित करने से शायद थोड़ी देर के लिए असली समस्या का ऑफसेट हो जाएगा। इसे गति देने के लिए सबसे अच्छी बात यह है कि अलग-अलग स्क्रीन पर अपनी कार्यक्षमता को अलग करना या मेन्यू के पीछे कम उपयोग की गई जानकारी को छिपाना।

1

मैं हमेशा आलसी लोड हो रहा है बहुत बड़ी डेटा मात्रा में एक ही बार में लोड किए जाने को रोकने के लिए उपयोगी है, जो वह जगह है जहाँ स्टार्टअप समय के सबसे अधिक हो जाता है जब डेटा की बड़ी मात्रा से निपटने पाया। मेमोरी पदचिह्न को कम करने के लिए अपने रिकॉर्ड को virtualized आइटम नियंत्रणों में बाध्य करें (स्पष्ट रूप से WPF स्मृति में आवश्यक है पर आपका न्यायाधीश है)।

लेकिन ईमानदार होना: कि है मार्टिन बहुत सही है ... 50 + डेटाबाउंड नियंत्रण, ... आदमी, 'freakin नरक ;-)

और 100% जवाबदेही के लिए अपने प्रयास, मुझे लगता है, आगे की जरूरत है स्पष्टीकरण। मेरी समझ के लिए, अनुप्रयोग उत्तरदायी हो सकते हैं या नहीं (उपयोगकर्ता इनपुट/उत्पादन आउटपुट बनाम बनाम कुछ भी नहीं कर रहे हैं)। क्या आप सबसे अच्छा प्रदर्शन का लक्ष्य रखते हैं? या यह एक रोचक-परिदृश्य है जिसे आप सामना कर रहे हैं (कुछ रिकॉर्ड पर लंबे कार्यों को करने के दौरान उपयोगकर्ता अन्य रिकॉर्ड संपादित करने दें)?

मुझे लगता है कि एंजेलडब्ल्यूपीएफ ने जो कुछ उल्लेख किया है, वह this neat article में प्राथमिकता बाध्यकारी पर पाया जा सकता है।

+0

हाँ, 50+ नियंत्रण आवंटित प्रतीत होते हैं, लेकिन वे सभी समान रूप से महत्वपूर्ण हैं। जो हिस्सा सबसे लंबा समय लेता है वह मेरे combos पर आइटम के स्रोत के लिए बाध्यकारी है ... लेकिन फॉर्म (व्यू) की प्रारंभिक लोडिंग बहुत लंबा समय लेती है। मैं फॉर्म को तेज़ी से चाहता हूं और फिर शेष बाइंडिंग हो सकती है या ऐसा कुछ हो सकता है। जब उपयोगकर्ता ड्रॉप डाउन पर क्लिक करता है जो बड़ी मात्रा में डेटा के कारण भी खोलने में लंबा समय लगता है ... तो मैं थोड़ी देर अटक गया हूं – Willem

+1

ठीक है, अगर यह कोई मदद है, तो इस पोस्ट में जानकारी देखें: http://blogs.msdn.com/b/jgoldb/archive/2007/10/10/improving-wpf-applications-startup-time.aspx। –

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