2010-03-26 13 views
14

मुझे पता है कि डब्ल्यूपीएफ अधिक जटिल है, इसलिए इसे और अधिक गणना करने के लिए सोचा जा सकता है। लेकिन चूंकि प्रतिपादन GPU पर किया जाता है, क्या यह उसी एप्लिकेशन (कार्यात्मक और दृष्टि से) के लिए Winforms से तेज़ नहीं होगा?किसके पास तेजी से रनटाइम प्रदर्शन है: डब्ल्यूपीएफ या विनफॉर्म?

मेरा मतलब है कि जब आप कोई गेम या भारी 3 डी प्रतिपादन नहीं चला रहे हैं, तो GPU भारी काम नहीं कर रहा है, है ना? जबकि सीपीयू हमेशा व्यस्त रहता है।

क्या यह वैध धारणा है या क्या WPF का GPU उपयोग इसकी पाइपलाइन में बहुत ही मामूली ऑपरेशन है?

संपादित करें: मुझे जो एप्लिकेशन दिलचस्पी है वह एक 3 डी मॉडलिंग और एनीमेशन सॉफ्टवेयर है, जहां दृश्य के अंदर नेविगेट करने और संपादित करने के लिए आपके पास 3 डी व्यूपोर्ट हैं। लेकिन मैं अपने आधुनिक वास्तुकला के कारण डब्ल्यूपीएफ का उपयोग करना चाहता हूं, और यह खरोंच से है।

EDIT2: मेरे उद्देश्यों के लिए मैं सॉफ्टवेयर की उच्च अंत आवश्यकताओं के कारण ऐप के लिए डायरेक्टएक्स हाथों का उपयोग भी करूंगा। एक समर्पित जीपीयू के बिना निचले अंत या कंप्यूटर का उपयोग करने वाले लोगों के लिए, यह ठीक है क्योंकि वे मेरे प्राथमिक ग्राहक क्षेत्र में नहीं हैं। फिल्म और गेम के लिए अन्य हाई एंड 3 डी सॉफ़्टवेयर की तरह, यह समझने योग्य होगा कि एक शक्तिशाली कंप्यूटर को एप्लिकेशन से पूरी तरह से लाभ उठाने के लिए आवश्यक है।

+1

यह अनुप्रयोगों पर निर्भर करता है। – SLaks

+0

क्षमा करें तो अधिक जानकारी जोड़ें। –

+0

मैं कोई विशेषज्ञ नहीं हूं, लेकिन मेरा मानना ​​है कि सटीक हार्डवेयर (और संबंधित ड्राइवर) का प्रदर्शन पर भी महत्वपूर्ण प्रभाव हो सकता है। –

उत्तर

18

बशर्ते मशीन में एक GPU है, तो आपको WPF में बेहतर प्रतिपादन प्रदर्शन मिलेगा।

हमारे पास एक बड़ा डेस्कटॉप एप्लिकेशन है जिसे हमने WinForms में लिखा था, और अब वे WPF पर पोर्ट कर रहे हैं। हमने बहुत बेहतर प्रतिपादन प्रदर्शन देखा है, खासकर जब खिड़कियों का आकार बदलना या नियंत्रण को पुनर्निर्मित करना।

हमने यह भी पाया है कि WPF "नियंत्रण" WinForm नियंत्रण से अधिक हल्के वजन वाले हैं। अगर मुझे सही याद है, तो डब्ल्यूपीएफ नियंत्रणों को एक ऑपरेटिंग सिस्टम हैंडल की आवश्यकता नहीं होती है, और कम से कम स्वतंत्र रूप से नहीं, WndProc के माध्यम से विंडोज़ विंडो संदेशों के लिए पंजीकरण नहीं करते हैं।

अपने मामले के लिए, चूंकि आप एक 3 डी मॉडलिंग ऐप बना रहे हैं, मशीन पर कुछ 3 डी हार्डवेयर मानते हैं, तो आपको WinForms पर पूरी तरह से WPF का उपयोग करना चाहिए।

+0

धन्यवाद, क्योंकि WPF GPU का भी उपयोग करता है, तो एप्लिकेशन और WPT के बीच एक लड़ाई होगी खुद को उस संसाधन का उपयोग करने में? –

+1

यदि आप अपने 3 डी ऐप के शीर्ष पर अपना 2 डी मेनू सिस्टम करते हैं तो इससे भी अधिक नहीं होगा। वास्तव में, डब्ल्यूपीएफ शायद इसे अधिक कुशलतापूर्वक करेगा। :) –

6

यह उत्तर देने का एक बहुत कठिन सवाल है।

डब्ल्यूपीएफ प्रदर्शन का एक बड़ा हिस्सा आपका जीपीयू है। एक अच्छा जीपीयू डब्ल्यूपीएफ अच्छा प्रदर्शन करने के लिए अद्भुत काम करता है। डब्ल्यूपीएफ बहुत प्रदर्शन कर सकता है। यदि आपकी आवश्यकताओं को एक सभ्य जीपीयू होना है, क्योंकि यह एक 3 डी मॉडलिंग प्रोग्राम है, तो आपको शायद विंडोज़ फॉर्म की तुलना में WPF प्रदर्शन अच्छा या बेहतर लगेगा - हालांकि यह वास्तव में आपके द्वारा उपयोग किए जा रहे कार्यों पर निर्भर करता है।

कहा जा रहा है कि, आमतौर पर तुलना करना मुश्किल होता है - अधिकांशतः क्योंकि डब्ल्यूपीएफ आपको बहुत सारे दृश्य प्रभाव जोड़ने की अनुमति देता है जो लोग विंडोज फॉर्म में कभी भी प्रयास नहीं करते हैं। कई WPF एप्लिकेशन "दृश्य" लगते हैं, भले ही वे कुछ दृश्यों में वास्तव में धीमे होते हैं क्योंकि अतिरिक्त दृश्य सुराग होते हैं।

कहा जा रहा है कि, यदि आपके पास बहुत सारे नियंत्रण हैं, तो डब्ल्यूपीएफ वास्तव में उचित रूप से विंडोज फॉर्म को बेहतर प्रदर्शन कर सकता है। विंडोज़ फॉर्म में, प्रत्येक नियंत्रण को एक अलग विंडो हैंडल की आवश्यकता होती है, और अपने स्वयं के संदेश सेट प्राप्त करता है। बहुत सारे नियंत्रणों के साथ, यह वास्तव में चीजों को बहुत नाटकीय रूप से धीमा कर सकता है।

असली सवाल यहां WPF perf होना चाहिए। आपके आवेदन के लिए "काफी अच्छा"। यदि आप 3 डी मॉडलिंग एप्लिकेशन कर रहे हैं, तो संभावना है कि डब्ल्यूपीएफ आपकी बाधा नहीं होगी- यह ठीक होना चाहिए।

+0

धन्यवाद, विनफॉर्म में होने वाली एक अलग विंडो हैंडल की आवश्यकता के ओवरहेड क्या है? चूंकि डब्ल्यूपीएफ भी जीपीयू का उपयोग करता है, क्या उस संसाधन का उपयोग करने में एप्लिकेशन और डब्लूपीटी के बीच एक लड़ाई होगी? –

+1

@ जोन: प्रत्येक विंडो हैंडल को संदेश पंप के माध्यम से अलग संदेश प्राप्त करना होगा। यदि आप सैकड़ों नियंत्रणों के साथ एक स्क्रीन बनाते हैं, तो यह वास्तव में विंडोज फॉर्म में बुरी तरह लगी है - खासकर यदि कस्टम प्रतिपादन की आवश्यकता है। "लड़ाई" के लिए - वास्तव में नहीं। याद रखें, Vista + W7 आपके सभी डेस्कटॉप प्रतिपादन के लिए ग्राफिक्स कार्ड का उपयोग करता है - आधुनिक GPUs इसे संभालने में बहुत अच्छे हैं। मैं विज्ञान करता हूँ सॉफ्टवेयर/3 डी मॉडलिंग, और हमारे नए उत्पादों के लिए विशेष रूप से WPF का उपयोग करें, और perf से प्यार करें। –

+0

धन्यवाद रीड। अच्छी सोच। क्या आपके ऐप्स ऑनलाइन उपलब्ध हैं? यह सोच रहा था कि स्क्रीनशॉट को देखने के लिए भी अच्छा होगा: ओ –

2

3 डी मॉडलिंग के लिए, WPF WinForms की तुलना में स्पष्ट रूप से बहुत बेहतर विकल्प है - लेकिन यह अभी भी आदर्श से एक लंबा तरीका है। Winforms में 3 डी प्रतिपादन के लिए कोई (प्रत्यक्ष) समर्थन नहीं है, और डब्ल्यूपीएफ में कुछ है।एक कार्यक्रम के लिए जो मुख्य रूप से 3 डी प्रतिपादन की ओर लक्षित है, हालांकि, आप ओपनजीएल या डायरेक्ट 3 डी जैसे 3 डी प्रतिपादन कार्यों के लिए विशेष रूप से समर्पित कुछ के साथ बेहतर हो सकते हैं।

स्वयं पर, इनमें से कोई भी WPF पर एक बड़ा लाभ प्रदान नहीं करता है, लेकिन जब तक आप जो भी कर रहे हैं वह काफी विशिष्ट नहीं है, लेकिन मैं सीधे उन लोगों का उपयोग नहीं करता। मैं OpenSceneGraph या Ogre3D जैसे कुछ का उपयोग करता हूं, जो कि इसके प्रतिपादन के लिए इनमें से किसी एक का उपयोग कर सकता है, लेकिन एक उच्च स्तरीय इंटरफ़ेस प्रदान करता है और आपके दृश्य को प्रतिपादित करने के लिए और अधिक करता है।

या तो इनमें से दोनों या शायद वास्तविक ड्राइंग के लिए WPF का उपयोग कर सकते हैं - लेकिन मुझे पूरा यकीन है कि कोई भी कम से कम वर्तमान में नहीं करता है। मुझे नहीं पता कि वे कभी भी करेंगे - वे शायद, लेकिन मुझे संदेह है कि यह वास्तविक प्राथमिकता है, क्योंकि वे पहले ही ओपनजीएल और डायरेक्ट 3 डी का समर्थन करते हैं। उनके उद्देश्यों के लिए डब्ल्यूपीएफ थोड़ा सा लाभ प्रदान करता है।

+0

धन्यवाद, हाँ यह चीजों को संभालने के तरीके में एक बिल्कुल विशेष ऐप है। अभी मैं केवल विंडोज का समर्थन करना चाहता हूं, इसलिए डायरेक्टएक्स पर टिकेगा। मुझे पता है कि डब्ल्यूपीएफ में 3 डी कार्यक्षमता है लेकिन मुझे नहीं लगता कि अगर मैं गलत नहीं हूं तो डायरेक्टएक्स के साथ प्रतिस्पर्धा करने के लिए कुछ ऐसा है। लेकिन सभी यूआई, आदि मैं WPF का उपयोग करने की योजना बना रहा हूं। –

+1

जबकि ओपनजीएल पोर्टेबल भी है, डायरेक्टएक्स पर इसे प्राथमिकता देने का मुख्य कारण यह है कि बस * इतना * काम करने के लिए बहुत अच्छा है। –

1

डब्ल्यूपीएफ के रूप में देखकर वास्तव में डूड के तहत डायरेक्टएक्स का उपयोग करता है और तथ्य यह है कि आप डायरेक्टएक्स ऑब्जेक्ट्स निर्दिष्ट करने के लिए एक्सएएमएल का उपयोग करते हैं, डब्ल्यूपीएफ अब तक का सबसे आसान समाधान है।

Example coding a camera in xaml:

<PerspectiveCamera x:Key="Camera" 
Position="0, 0, 4" 
LookDirection="0, 0, -4" 
UpDirection="0, 1, 0" 
FieldOfView="30"/> 
+0

धन्यवाद, तो आप का मतलब है कि मैं XAML का उपयोग कर पूरे डायरेक्टएक्स एसडीके तक पहुंच सकता हूं? मैं 3 डी सामान के लिए स्लिम डीएक्स का उपयोग करने की योजना बना रहा था। –

+0

धन्यवाद, यह समझ में आता है। –

+0

चेतावनी का एक शब्द: हालांकि मुझे डब्ल्यूपीएफ 3 डी सामान बहुत अच्छा लगता है, लेकिन वास्तव में 3 डी सामग्री को बिटमैप में प्रस्तुत करने का कोई अच्छा तरीका नहीं है, इसलिए यदि आपको अपने 3 डी दृश्यों को निर्यात करने की आवश्यकता होगी, तो मैं साथ जाऊंगा 3 डी भाग के लिए SlimDX। अधिक जानकारी के लिए http://stackoverflow.com/questions/2179042/rendertargetbitmap-and-viewport3d-quality-issues देखें। – Grokys

7

एप्लिकेशन परिदृश्य आप का वर्णन के लिए, मैं WPF एक व्यापक अंतर से एक पूर्ण विशेषताओं GPU पर 3 डी काम के लिए WinForms मात की उम्मीद करेंगे।

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

(WinForms आसपास विंडोज GDI एक अपेक्षाकृत पतली आवरण और उपयोगकर्ता मॉडल है कि मूल रूप से देर से 1980 में बनाया गया था। Windows उपयोगकर्ता नियंत्रण मॉडल पिछले 25 वर्षों में विकसित हुआ है, लेकिन मूल वास्तु पैटर्न बड़े पैमाने पर अपरिवर्तित रहे हैं।)

उदाहरण के लिए, डब्ल्यूपीएफ हमेशा यूआई प्रतिपादन को एप्लिकेशन तर्क से अलग करता है। जब डब्ल्यूपीएफ विंडो कुछ खींचने के लिए जाती है, तो मूल प्रतिपादन पृष्ठभूमि धागे पर होता है। वीडियो रीट्रेस अंतराल के दौरान ताज़ा दृश्यों को डिस्प्ले पर फ़्लिप किया जाता है, इसलिए आपको स्क्रीन पर आंशिक ब्लिट्ज या "फाड़ने" कलाकृतियां नहीं मिलती हैं।

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

डब्ल्यूपीएफ के डिफ़ॉल्ट नियंत्रण GPU जागरूक हैं और चमक और पारदर्शिता के साथ कस्टम स्टाइल किया जा सकता है और सभी GPU त्वरित नहीं हो सकते हैं। WinForms नियंत्रण GPU सुविधाओं से महत्वपूर्ण रूप से लाभ नहीं उठाते हैं, क्योंकि केवल एक ही चीज WinForms (विंडोज उपयोगकर्ता नियंत्रण) प्रतिपादन के लिए उपयोग करता है 2 डी बिटब्लिट और आयताकार भरने के लिए उपयोग करता है। चमक, पारदर्शिता, एनिमेशन WinForms के साथ सभी संभव हैं, लेकिन आपको सभी उन्हें लागू करने के लिए काम करना होगा।

डब्ल्यूपीएफ में, यूआई की कमी ज्यादातर डब्ल्यूपीएफ को आपके लिए करने के लिए डिजाइनिंग और स्टाइलिंग का विषय है। WinForms में, आपको पिक्सेल स्वयं को धक्का देना होगा।

+0

तीन कम से कम एक छोटा है, लेकिन विंडोज एक्सपी पर डब्ल्यूपीएफ के साथ बुरा काम है। यह Vista और ऊपर हल हो गया है, इसलिए यह विंडोज के एम्बेडेड संस्करण का उपयोग कर लोगों को काटता है (XP के बाहर उसमें से कोई आरटीएम नहीं है)। उच्च विपरीत एनिमेशन करते समय आर्टिफैक्ट ऊर्ध्वाधर सिंक खो रहा है, यहां तक ​​कि एक उच्च विपरीत एमपीईजी फ़ाइल खेलने की तरह कुछ भी। –

+0

यदि आपको WinXP या इससे पहले का समर्थन करना है, तो मैं वैसे भी WPF का उपयोग करने की अनुशंसा नहीं करता। सिर्फ इसलिए कि ढांचा तकनीकी रूप से निष्पादित कर सकता है इसका मतलब यह नहीं है कि यह अच्छी तरह से काम करेगा। ;> – dthorpe

+0

फिर, कोई विंडोज़ विस्टा एम्बेडेड नहीं था, केवल विंडोज एक्सपी एम्बेडेड :) विंडोज 7 एम्बेडेड साल बाद आया ... –

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