2010-04-23 14 views
9

इसलिए, मैं एक WPF ऐप बना रहा हूं और आज टेस्ट परिनियोजन किया, और पाया कि यह बहुत खराब प्रदर्शन करता है। मैं आश्चर्यचकित था, क्योंकि हम वास्तव में दृश्य प्रभाव या एनिमेशन के रास्ते में बहुत कुछ नहीं कर रहे हैं।डब्ल्यूपीएफ: पुराने पीसी पर चलने के लिए प्रदर्शन में सुधार

मैंने दो मशीनों पर तैनात किया: सबसे तेज़ और धीमा जो एप्लिकेशन को चलाने की आवश्यकता होगी (सबसे धीमे पीसी में इंटेल सेलेरॉन 1.80GHz 2 जीबी रैम है)। एप्लिकेशन तेजी से मशीन पर बहुत अच्छी तरह से चला गया, लेकिन धीमी मशीन पर चटनी थी। और जब मैं "चंचल" कहता हूं, मेरा मतलब है कि कर्सर फोकस करने वाले ऐप की किसी भी खुली खिड़की पर बस इसे पार कर गया।

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

ऐप मेरी विकास मशीन पर ठीक चलाता है, लेकिन मैं सीपीयू स्पाइकिंग को 10% तक देखता हूं, बस खिड़की पर कर्सर चला रहा हूं।

मैंने एमएस से डब्ल्यूपीएफ प्रदर्शन उपकरण डाउनलोड किया और इसके साथ (मेरे देव मशीन पर) tinkering रहा है। डॉक्स "फ़्रेम दर" ड्रिलिंग उपकरण में मीट्रिक के बारे में यह कहना:

एनीमेशन के बिना अनुप्रयोगों के लिए, यह मान 0.

एप्लिकेशन को किसी भी भारी एनिमेशन नहीं कर रहा है के पास होना चाहिए, लेकिन कर्सर किसी भी खिड़की पर होने पर फ्रेम दर 50 के करीब रहता है। जिन स्क्रीनों पर मैंने परीक्षण किया है उनमें कॉलम हेडर एक ग्रिड में हैं जो "हाइलाइट" और बटन जो स्क्रॉल किए जाने पर रंग और उपस्थिति को बदलते हैं। खिड़कियों के रिक्त क्षेत्रों पर भी माउस को ले जाने के कारण एक ही फ्रेम दर और सीपीयू उपयोग (इन मामूली एनिमेशन से संबंधित प्रतीत नहीं होता है)।

(साथ ही, मैं यह समझने में असमर्थ हूं कि दो डिफ़ॉल्ट उपकरण - छिद्रक और विजुअल प्रोफाइलर - WPF प्रदर्शन टूल में स्थापित किया गया है। यह संभवतः एक अलग प्रश्न है)।

मेरे पास रेडगेट का प्रोफाइलिंग टूल भी है, लेकिन मुझे यकीन नहीं है कि क्या प्रदर्शन को प्रदर्शित करने पर कोई प्रकाश डाला जा सकता है।

तो, मुझे एहसास है कि विनिर्देश या नमूना कोड (जिसे मैं पोस्ट नहीं कर सकता) के बिना समस्या निवारण के लिए यह एक आसान बात नहीं है। मेरे प्रश्न हैं:

  • क्या कुछ सामान्य बातें कोड में लिए देखने के (या बचने के लिए) प्रदर्शन में सुधार करने के लिए कर रहे हैं?
  • क्या कदम मैं समस्या को कम करने के लिए WPF प्रदर्शन उपकरण का उपयोग कर सकते हैं?
  • क्या पीसी स्पेक ऊपर सूचीबद्ध है (इंटेल सेलेरॉन 1.80GHz 2 जीबी रैम के साथ) भी वेनिला डब्ल्यूपीएफ अनुप्रयोगों को चलाने में धीमा है?

उत्तर

3

क्या आप अपने यूआई तत्वों में BitmapEffect -s लागू कर रहे हैं? उन्हें GPU द्वारा नियंत्रित नहीं किया जाता है, इसलिए CPU उन्हें प्रतिपादित करने का ख्याल रखता है। अगर सही तरीके से उपयोग नहीं किया जाता है (उदाहरण के लिए एक बाहरी जटिल तत्व पर लागू एक OuterGlowBitmapEffect होने) वे प्रदर्शन पर भयानक प्रभाव डाल सकते हैं।

इसके अलावा, आप अभी भी एक प्रदर्शन प्रोफाइलर के साथ अपने ऐप को प्रोफाइल करने का प्रयास करना चाहेंगे। बस यह देखने के लिए कि क्या यह आपका कोड नहीं है जो इसका कारण बनता है।

0

यह WPF के लिए सामान्य नहीं है - मुझे संदेह होगा कि आपके डेवलपर्स में से एक ने कोड लिखा है जो पृष्ठभूमि में टाइमर चलाता है (या आपके विवरण को दिया गया है, माउस मूव हैंडलर) जो यूआई को किसी तरह से प्रभावित कर रहा है ।

यदि आपके पास एएनटीएस प्रदर्शन प्रोफाइलर है (यह वास्तव में अच्छा है) तो मैं इसे आपके ऐप पर चलाऊंगा और समस्या का पुनरुत्पादन करूंगा।

एक बार ऐसा करने के बाद, एएनटीएस आपको समस्या से काफी जल्दी बताएगा। यदि एएनटीएस कुछ भी प्रकट नहीं करता है, और आपको दिखाता है कि वास्तव में इस समय आपके कोड में से कोई भी नहीं चल रहा है, तो मुझे बग्गी ग्राफिक्स कार्ड ड्राइवरों पर संदेह होगा।

आप निम्न रजिस्ट्री कुंजी की स्थापना, और फिर से कोशिश कर रहा द्वारा हार्डवेयर त्वरण को अक्षम द्वारा इस बात के लिए परीक्षण कर सकते हैं:

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1 

नोट: DisableHWAcceleration मूल्य एक DWORD

होना चाहिए
संबंधित मुद्दे