2009-08-28 12 views
27

मैं एक नया विंडोज जीयूआई अनुप्रयोग, जहां आवश्यकताओं में से एक है कि एप्लिकेशन बहुत संवेदनशील, जल्दी लोड करने के लिए होना चाहिए, और एक प्रकाश स्मृति पदचिह्न लेखन पर विचार कर रहा हूँ क्यूटी आवेदन प्रदर्शन।बनाम WinAPI/MFC/WTL/

मैंने इस प्रकार की आवश्यकता के साथ बनाए गए पिछले ऐप्स के लिए डब्ल्यूटीएल का उपयोग किया है, लेकिन जैसा कि मैं अपने दिन के काम में हर समय .NET का उपयोग करता हूं डब्ल्यूटीएल वापस जाने के लिए और अधिक दर्दनाक हो रहा है। मुझे इस ऐप के लिए .NET का उपयोग करने में कोई दिलचस्पी नहीं है, क्योंकि मुझे अभी भी बड़ी .NET UI की कमी का प्रदर्शन मिल रहा है, लेकिन मुझे UI के लिए बेहतर C++ फ्रेमवर्क का उपयोग करने में दिलचस्पी है - जैसे Qt।

मैं शुरू करने से पहले सुनिश्चित होना चाहता हूं कि मुझे प्रदर्शन मोर्चे पर खेद नहीं होगा।

तो: क्या क्यूटी तेज है?

मैं मिलान के करीब आने के उदाहरणों के बारे में प्रश्नों को आजमाऊंगा और योग्यता प्राप्त करूंगा: मेरा वर्तमान डब्ल्यूटीएल ऐप Programmer's Notepad है। वर्तमान संस्करण जो मैं काम कर रहा हूं, 32-बिट के लिए कोड के लगभग 4 एमबी वजन का होता है, एक एकल भाषा अनुवाद के साथ संकलित संकलित संस्करण। एक आधुनिक फास्ट पीसी पर लोड होने में 1-3 सेकेंड लगते हैं, जो महत्वपूर्ण है क्योंकि लोग इसे आईडीई आदि से बचने के लिए अक्सर आग लगते हैं। एक बार जब आप एक संपादन के लिए संपादन कर रहे हैं तो स्मृति पदचिह्न आमतौर पर 64-बिट Win7 पर 12-20 एमबी होता है जबकि। आप ऐप को नॉन-स्टॉप चला सकते हैं, इसे कम से कम छोड़ दें, जब भी आप स्विच करते हैं तो यह हमेशा ध्यान से कूदता है।

तर्क की खातिर मान लीजिए कि मैं बंदरगाह के लिए संभावित भविष्य के पार मंच समर्थन और/या बहुत आसान यूआई ढांचे के लिए क्यूटी करने के लिए अपने WTL एप्लिकेशन चाहते हैं। क्यूटी के साथ इस स्तर के प्रदर्शन से मेल नहीं खाते तो मैं करीब आना चाहता हूं।

उत्तर

21

देशी एपीआई जाना परिभाषा के अनुसार सबसे अधिक प्रचलित पसंद है - इसके अलावा कुछ भी देशी एपीआई के आसपास एक रैपर है।

आप प्रदर्शन बाधा होने की क्या अपेक्षा करते हैं? कोई सख्त संख्या? ईमानदारी से, अस्पष्ट, बहुत प्रतिक्रियाशील, लोड करने के लिए त्वरित, और एक हल्की स्मृति पदचिह्न '' मुझे एक बग इकट्ठा करने की आवश्यकता की तरह लगता है। प्रदर्शन अक्सर overspecified है।

बिंदु करने के लिए

:

क्यूटी के संकेत-स्लॉट तंत्र वास्तव में तेजी से होता है। यह स्थिर रूप से टाइप किया गया है और एमओसी के साथ काफी सरल स्लॉट विधि कॉल में अनुवाद करता है।

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

+0

सहमत हुए, प्रदर्शन अक्सर अधिक निर्दिष्ट होता है, और आवश्यकताएं गलत बताई जाती हैं। हालांकि, अगर आपको नोटपैड को 1 से कम की बजाय लोड करने के लिए 10 सेकंड लगते हैं, तो आप कैसा महसूस करेंगे, और जब भी आप इसे कम से कम बहाल करते हैं तो पेज को वापस स्मृति में वापस ले जाते हैं? कुछ ऐप्स विशेष प्रदर्शन ध्यान वारंट करते हैं। –

+1

इसके अलावा, सहमत है कि देशी एपीआई के अलावा कुछ भी एक रैपर होगा, लेकिन तेज रैपर और धीमी रैपर हैं - विन फॉर्म एक धीमी रैपर है, डब्ल्यूपीएफ एक हिमनद रैपर है। मैं एक रैपर की तलाश में हूं जो ऐप को उपयोग करने में खुशी देता है - ढांचे को अपना काम करना चाहिए और मेरे रास्ते से बाहर निकलना चाहिए :) –

+2

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

4

समग्र कार्यक्रम प्रदर्शन निश्चित रूप से आपके ऊपर होगा, लेकिन मुझे नहीं लगता कि आपको यूआई के बारे में चिंता करने की ज़रूरत है। ग्राफिक्स दृश्य और ओपनजीएल समर्थन के लिए धन्यवाद आप तेजी से 2 डी/3 डी ग्राफिक्स भी कर सकते हैं।

इतना ही नहीं बल्कि, मेरे अपने अनुभव से एक उदाहरण:

  • राम की 128 एमबी के साथ लिनक्स/एंबेडेड XP मशीन पर क्यूटी का उपयोग करना। विंडोज एमएफसी का उपयोग करता है, लिनक्स क्यूटी का उपयोग करता है। बहुत सारे चित्रकला के साथ कस्टम उपयोगकर्ता जीयूआई, और नियंत्रण/विजेट के साथ एक नियमित व्यवस्थापक जीयूआई। उपयोगकर्ता के दृष्टिकोण से, क्यूटी एमएफसी जितनी तेजी से है। नोट: यह एक पूर्ण स्क्रीन प्रोग्राम था जिसे कम नहीं किया जा सका।

संपादित करने के बाद आप अधिक जानकारी जोड़ लिया है: आप एक बड़ा निष्पादन योग्य आकार (विशेष रूप से क्यूटी MinGW के साथ) और अधिक स्मृति उपयोग की अपेक्षा कर सकते हैं। अपने मामले में, आईडीई में से किसी एक के साथ खेलने का प्रयास करें (उदा।क्यूटी निर्माता) या text editors क्यूटी में लिखा गया है और देखें कि आप क्या सोचते हैं।

7

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

उन्होंने ड्राइंग को तेज करने के लिए पिछले वर्षों में बहुत सारे काम किए हैं (यह वह जगह है जहां अधिकांश समय व्यतीत होता है)। आम तौर पर जब तक कि आप वास्तव में एक प्रकार का संपादक लागू नहीं करते हैं, आमतौर पर यूआई के अंदर कोड निष्पादित करने में बहुत समय नहीं लगता है। यह ज्यादातर उपयोगकर्ता से इनपुट पर इंतजार कर रहा है।

2

मैं व्यक्तिगत रूप से क्यूटी चुनता हूं क्योंकि मैंने इसका उपयोग करने के लिए कभी भी प्रदर्शन प्रदर्शन नहीं देखा है। उस ने कहा, आप wxwidgets के साथ देशी के करीब थोड़ा हो सकते हैं और अभी भी एक क्रॉस-प्लेटफ़ॉर्म ऐप है। आप बहुत कभी भी सीधे Win32 या MFC (और परिवार) के रूप में नहीं होंगे लेकिन आप एक बहु-मंच दर्शक प्राप्त करेंगे। तो आपके लिए सवाल यह है कि क्या यह एक छोटे से व्यापार के लायक है?

+0

शायद इसके लायक है, धन्यवाद। मैंने wxwidgets पर विचार किया था, लेकिन मुझे बस एपीआई पसंद नहीं है - एमएफसी की तरह बहुत ज्यादा लगता है जिसे मैं जुनून से नापसंद करता हूं। –

0

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

ग्राफिक्स पेंटिंग के लिए, मुझे हमेशा मेमोरी बिटमैप में प्रस्तुत करने के लिए उपयोगी लगता है, और उसके बाद स्क्रीन पर उसे दबाएं। यह तेज़ी से दिखता है, और यह तेज हो सकता है, क्योंकि यह क्लिपिंग के बारे में चिंता नहीं कर रहा है।

आमतौर पर किसी प्रकार की प्रदर्शन समस्या होती है जो कि इससे बचने की कोशिश के बावजूद होती है। मैं इन समस्याओं को खोजने के लिए एक बहुत ही सरल तरीका का उपयोग करता हूं: केवल तब तक प्रतीक्षा करें जब तक कि यह व्यक्तिपरक रूप से धीमा न हो, इसे रोकें, और कॉल स्टैक की जांच करें। मैं इसे कई बार करता हूं - 10 आमतौर पर पर्याप्त से अधिक होता है। यह एक गरीब आदमी का प्रोफाइलर है लेकिन अच्छी तरह से काम करता है, कोई झगड़ा नहीं, कोई परेशान नहीं है। समस्या हमेशा कुछ होती है जिसे कोई भी अनुमान लगा सकता है, और आमतौर पर ठीक करना आसान होता है। This is why it works.

यदि किसी भी जटिलता के संवाद हैं, तो मैं अपनी तकनीक का उपयोग करता हूं, Dynamic Dialogs, क्योंकि मैं खराब हूं। वे बेहोश दिल के लिए नहीं हैं, लेकिन बहुत लचीले हैं और अच्छी तरह से प्रदर्शन करते हैं।

9

Programmer's Notepad एक टेक्स्ट एडिटर है जो Scintilla का उपयोग टेक्स्ट संपादन कोर घटक और यूआई लाइब्रेरी के रूप में डब्ल्यूटीएल के रूप में करता है।

JuffEd एक टेक्स्ट एडिटर है जो QScintilla का उपयोग टेक्स्ट संपादन कोर घटक और क्यूटी यूआई लाइब्रेरी के रूप में करता है।

मैंने प्रोग्रामर के नोटपैड और जफएड के नवीनतम संस्करण स्थापित किए हैं और Process Explorer का उपयोग करके दोनों संपादकों की स्मृति पदचिह्न का अध्ययन किया है।

खाली फ़ाइल:
- juffed.exe निजी बाइट्स: 4,532K आभासी आकार: 56,288K
- pn.exe निजी बाइट्स: 6,316K आभासी आकार: 57,268K

"WTL \ \ atlctrls शामिल करें। एच "(264 के, ~ 10.000 लाइनें, शुरुआत से कुछ बार अंत तक स्क्रॉल):
- juffed.exe निजी बाइट्स: 7,964 के वर्चुअल साइज: 62,640K
- pn.exe निजी बाइट्स: 7,480K आभासी आकार: 63,180 के

एक चुनिंदा सभी (Ctrl-A) के बाद, कट (Ctrl-X) और पेस्ट (Ctrl-V)
- juffed.exe निजी बाइट्स: 8,488K आभासी आकार: 66,700K
- पीएन।exe प्राइवेट बाइट्स: 8,580 के वर्चुअल साइज: 63,712 के

ध्यान दें कि स्क्रॉल करते समय (पीजी डाउन/पीजी अप दबाया गया) JuffEd प्रोग्रामर के नोटपैड की तुलना में अधिक CPU खाने लग रहा था।

संयुक्त exe और dll आकार:
- juffed.exe QtXml4.dll QtGui4.dll QtCore4.dll qscintilla2.dll mingwm10.dll libjuff.dll 14MB
- pn.exe SciLexer.dll msvcr80.dll msvcp80.dll msvcm80.dll libexpat.dll ctagsnavigator.dll pnse.dll 4.77 एमबी

उपरोक्त तुलना निष्पक्ष नहीं है क्योंकि JuffEd विजुअल स्टूडियो 2005 के साथ संकलित नहीं किया गया था, जो छोटी बाइनरी उत्पन्न करनी चाहिए।

+0

धन्यवाद, यह एक उपयोगी तुलना है! –

3

क्यूटी एक बहुत अच्छा ढांचा है, लेकिन प्रदर्शन प्रदर्शन है। यह ज्यादातर चित्रकला के साथ करना है। क्यूटी सब कुछ पेंटिंग के लिए अपने स्वयं के रेंडरर का उपयोग करता है - पाठ, आयताकार, आप इसे नाम देते हैं ... अंतर्निहित विंडो सिस्टम के लिए प्रत्येक क्यूटी एप्लिकेशन एक बड़ी खिड़की की तरह दिखता है जिसमें एक बड़ा बिटमैप होता है। कोई घोंसला खिड़कियां नहीं, कुछ भी नहीं। यह झिलमिलाहट मुक्त प्रतिपादन और पेंटिंग पर अधिकतम नियंत्रण के लिए अच्छा है, लेकिन यह हार्डवेयर त्वरण के लिए पूरी तरह से किसी भी संभावना से गुजरने की कीमत पर आता है। आजकल हार्डवेयर त्वरण अभी भी ध्यान देने योग्य है, उदा। जब एक ही रंग में बड़े आयताकार भरते हैं, जैसा अक्सर खिड़की प्रणालियों में होता है।

उस ने कहा, क्यूटी लगभग सभी मामलों में "तेज़ पर्याप्त" है।

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

जैसा कि मैंने कहा था, क्यूटी पर्याप्त तेज़ है, लेकिन अगर बैटरी की नाली बढ़ती है, या यदि आप बहुत चिकनी विंडो आकार बदलने की परवाह करते हैं, तो आपके पास मूल जाने के अलावा ज्यादा विकल्प नहीं है।

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

+0

3 सेकंड हल्की गति है। .NET में + WPF आप कुछ मशीनों – GorillaApe

34

यदि आपने अभी भी इसे हल नहीं किया है या किसी और को और अनुभव की तलाश में है तो बस मेरे अनुभव के साथ चिल्लाओ। मैंने हाल ही में क्यूटी 4.7 के साथ एक बहुत भारी (नियमित QGraphicsView, OpenGL QGraphicsView, QtSQL डेटाबेस एक्सेस, ...) अनुप्रयोग विकसित किया है और मैं प्रदर्शन के लिए एक स्टिकर भी हूं। इसमें पाठ्यक्रम के स्टार्टअप प्रदर्शन शामिल हैं, मुझे अपने अनुप्रयोगों को लगभग तुरंत दिखाना पसंद है, इसलिए मैं उस पर काफी समय बिताता हूं।

गति: बढ़िया, मुझे कोई शिकायत नहीं है। मेरा भारी ऐप जिसे स्टार्टअप पर कम से कम 100 विगेट्स को तुरंत चालू करने की आवश्यकता है (दिया गया है, उनमें से बहुत सारे QLabels हैं) एक दूसरे सेकेंड में शुरू होता है (मुझे डबलक्लिंग और खिड़की दिखाई देने के बीच कोई देरी नहीं दिखाई देती है)।

मेमोरी: यह एक बुरा हिस्सा है, मेरे अनुभव में कई उपप्रणाली के साथ क्यूटी एक उल्लेखनीय मात्रा में स्मृति का उपयोग करती है। फिर फिर यह कई उपप्रणाली उपयोग, QtXML, QtOpenGL, QtSQL, QtSVG के लिए गिनती है, आप इसका नाम देते हैं, मैं इसका उपयोग करता हूं। स्टार्टअप पर मेरे वर्तमान एप्लिकेशन के बारे में 50 MB उपयोग करने के लिए प्रबंधन करता है, लेकिन यह बिजली की तेजी से प्रारंभ होता है और तेजी से रूप में अच्छी तरह से प्रतिक्रिया करता है प्रोग्रामिंग के

आसानी/एपीआई: क्यूटी उपयोग करने के लिए एक निरपेक्ष खुशी, अपने विजेट वर्गों के लिए उसके कंटेनर से है इसके मॉड्यूल मेमोरी मैनेजमेंट आसान (क्यूओब्जेक्ट) सिस्टम बनाने और सुपर प्रदर्शन के दौरान सभी समय।मैंने हमेशा इसके पहले शुद्ध Win32 लिखा है और मैं कभी वापस जाना होगा। उदाहरण के लिए, QtConcurrent वर्गों के साथ मैं myMethod(arguments) से QtConcurrent::run(this, MyClass::myMethod, arguments) करने और एक सिंगल लाइन के साथ एक गैर जीयूआई भारी प्रसंस्करण विधि पिरोया गया था एक विधि मंगलाचरण को बदलने में सक्षम था। QFuture और QFutureWatcher के साथ मैं थ्रेड समाप्त होने पर निगरानी कर सकता था (या तो सिग्नल या बस विधि जांच के साथ)। उपयोग की आसानी क्या है! चारों ओर बहुत सुरुचिपूर्ण डिजाइन।

तो पीछे मुड़कर देखें: बहुत अच्छा प्रदर्शन, काफी उच्च स्मृति उपयोग कई submodules उपयोग किया जाता है, तो, शानदार एपीआई और संभावनाओं, पार मंच (एप्लिकेशन स्टार्टअप सहित)

+0

पर आधा मिनट .. आवश्यकता हो सकती है क्यों QFuture/QtConcurrent रन का उपयोग आप इन सभी सी ++ 11 में मानक अब जब (std :: भविष्य, std :: async, और आप अधिक निम्न स्तर चाहते हैं std :: धागा)? आप क्यूटी का उपयोग कर पोर्टेबल के रूप में हमेशा के रूप में रहेंगे। – Ghita

+4

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

0

मैं एक बार निर्धारित करने के लिए "ऐप को बनाने वाली प्राथमिकता "एक संख्या (चाहे वह प्रधान या समग्र थी)।

मैंने पहली बार एक क्यूटी जीयूआई का प्रयास किया, और 8 जीबी रैम और एक एएमडी 10 9 0 टी @ 4GHz के साथ कंप्यूटर पर 1,29 9,827 के जवाब को वापस करने में 5 घंटे लग गए, लिनक्स के तहत कोई अन्य अग्रभूमि प्रक्रिया नहीं चल रही थी।

मेरे दूसरे प्रयास एक सांत्वना अनुप्रयोग है कि ठीक उसी कोड का इस्तेमाल किया की एक QProcess इस्तेमाल किया। एक लैपटॉप पर 1.3 जीबी रैम और 1.4GHz सीपीयू के साथ, प्रतिक्रिया कोई समझ में देरी के साथ आया था।

हालांकि, यह इनकार नहीं करेगा कि यह GTK + या Win32 से कहीं अधिक आसान है, और यह चीजों को काफी अच्छी तरह से संभालता है, लेकिन यदि आप इसका उपयोग करते हैं तो पूरी तरह से गहन प्रसंस्करण जीयूआई से।

+1

आप कुछ गलत कर रहे होंगे। – minexew

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