
सभी को नमस्कार! हमारी टीम TestMace API के साथ काम करने के लिए एक IDE विकसित कर रही है। हमारे पिछले लेखों में से एक में , पाठकों ने इलेक्ट्रॉन अनुप्रयोगों के अत्यधिक उच्च मेमोरी खपत की ओर इशारा किया। खैर, संख्याओं का समय आ गया है :) इस लेख में, लेखक विभिन्न टूलकिट का उपयोग करके लिखी गई एकल-विंडो अनुप्रयोगों की मेमोरी खपत का अनुमान लगाता है। अच्छा पढ़ लो!
एक जीयूआई बनाने के लिए उपकरणों का सही सेट ढूंढते हुए, मैंने उन स्मृति की मात्रा को मापने का फैसला किया जो उन्होंने कब्जा कर ली थीं।
वास्तव में, मैं यह पता लगाना चाहता था कि किसी प्रोग्राम के लिए एक खाली खिड़की से कम से कम कितनी मेमोरी की आवश्यकता है। इस लेख में मैं परिणामों के बारे में बात करूंगा।
त्याग
यह आलेख लिनक्स पर GUI बनाने के लिए विभिन्न उपकरणों, चौखटे और पुस्तकालयों का उपयोग करते समय कार्यक्रम द्वारा कब्जा की गई मेमोरी के बारे में जानकारी प्रदान करता है। सभी माप एक ही कंप्यूटर पर Ubuntu 19.04 (डिस्को डिंगो) x86_64 के साथ Ksysguard प्रोग्राम का उपयोग करके किए गए थे, जो अनुप्रयोगों द्वारा खपत आंतरिक मेमोरी पर डेटा प्रदान करता है। मैंने विशेष रूप से परीक्षण के लिए सिस्टम को पुनर्स्थापित नहीं किया। यह मेरे सर्वव्यापी उबंटू पर प्रदर्शन किया गया था, जिस पर पहले से ही विभिन्न पैकेज स्थापित थे, जो परिणामों को प्रभावित / विकृत कर सकते थे।
कुछ उपकरणों के लिए, मैंने विंडोज 10 पर प्राप्त मापों को भी जोड़ा, जिनकी तुलना लिनक्स से शायद ही की जा सकती है, लेकिन यह देखना दिलचस्प है।
मैं यह नोट करना चाहता हूं कि मेरे माप वैज्ञानिक मूल्य के नहीं हैं। अन्य प्रारंभिक डेटा होने पर, आप पूरी तरह से अलग परिणाम प्राप्त कर सकते हैं।
इतना आसान नहीं जितना लगता है
तो हमें क्या मापने की आवश्यकता है? वर्चुअल मेमोरी (वीएसजेड)? निवासी स्मृति (आरएसएस)? खुद का आरएसएस? आरएसएस साझा किया?
संक्षेप में, तब ... मेरा मानना है कि जब उपकरणों के विभिन्न सेटों का उपयोग करके विकसित दो समान कार्यक्रमों की तुलना करते हैं , तो स्मैप्स के साथ अपनी स्मृति की प्रक्रिया की मात्रा को मापना सबसे सटीक होगा। Ksysguard विस्तृत स्मृति जानकारी प्रदर्शित करने के लिए स्मैप्स का उपयोग करता है। हालाँकि, शुरू से ही, मेरे प्रयोग में, मैंने रैम खपत पैनल के डेटा को डिफ़ॉल्ट रूप से उपयोग किया, और उसके बाद ही मुझे ज्ञात हुआ कि स्मैप अधिक सटीक संख्याएँ देते हैं। डेटा स्थिरता सुनिश्चित करने के लिए, मैंने सूची में प्रस्तुत सभी उपकरणों के लिए डिफ़ॉल्ट रैम पैनल से जानकारी का उपयोग किया, हालांकि सबसे अधिक संभावना है, मेमोरी खपत के विस्तृत विवरण के साथ एक इंटरफेस का उपयोग करके, एक समान स्थिति देखी जा सकती है।
यदि अधिक विस्तार से, तो ... इस लेख में मुझे लिनक्स में स्मृति प्रबंधन पर सबक के लिए पर्याप्त जगह नहीं मिली होगी, और इसके अलावा, इस विषय पर पहले से ही कई योग्य सामग्री हैं: ELC: अनुप्रयोग वास्तव में कितनी मेमोरी का उपयोग कर रहे हैं? , / Proc Filesystem , proc - प्रक्रिया जानकारी छद्म-फाइलसिस्टम , लिनक्स मेमोरी प्रबंधन अवलोकन , मेमोरी प्रबंधन
उपकरणों की सूची और उनके स्मृति संकेतक
एक शब्द भी अधिक नहीं। यहाँ मेरे परिणाम हैं:

मैं स्पंदन की चमक से हैरान था, यह देखते हुए कि यह मूल रूप से मोबाइल उपकरणों के लिए जीयूआई बनाने के लिए एक रूपरेखा के रूप में कल्पना की गई थी।UPD ( kirbyfan64sos के लिए मेरा धन्यवाद): स्पंदन डेस्कटॉप अभी भी विकास के शुरुआती चरण में है, और सभी बिल्ड डिबगिंग हैं। इसका मतलब है कि सभी प्रोफाइलर (ऑब्जर्वेटरी की तरह) सक्रिय हैं, सभी डिबग स्टेटमेंट सक्षम हैं, और एओटी कंपाइलर अक्षम है। रिलीज बिल्ड का उपयोग करके डेटा को डबल-चेक करना दिलचस्प होगा।
मैं यह नहीं कहूंगा कि मैं इलेक्ट्रॉन के प्रदर्शन से मारा गया था।
HorusUI के साथ, मैं 20 एमबी के अनुमानित आंकड़े की उम्मीद कर रहा था, क्योंकि यह OpenGL और GUI के तत्काल रेंडरिंग मोड का उपयोग करता है। मुझे समझ नहीं आया कि यह आंकड़ा अधिक क्यों निकला।
स्विंग और जावाएफएक्स जावा फ्रेमवर्क ने भी दिलचस्प परिणाम दिखाए हैं। ये दोनों ही बहुत ही अतृप्त हैं, और यदि आप सुनिश्चित नहीं हैं कि कौन सा आपके नए जावा प्रोजेक्ट के लिए उपयुक्त होगा, तो अधिक सुविधाजनक और आधुनिक JavaFX फ्रेमवर्क का चुनाव करना उचित प्रतीत होता है, हालाँकि आपको इसे थोड़ी अधिक मेमोरी से भरना होगा। लेकिन अगर आपकी स्मृति सोने में अपने वजन के लायक है, तो, निश्चित रूप से, स्विंग चुनें।
क्यूटी ने भी बहुत दिलचस्प आंकड़े दिखाए और अधिकांश अन्य लोकप्रिय उपकरणों की तुलना में बहुत अधिक जीवंत हो गए। यह ध्यान देने योग्य है कि इसके द्वारा अधिग्रहित अधिकांश मेमोरी मेरे सिस्टम पर स्थापित amdgpu ड्राइवर द्वारा खपत की गई राशि है। शायद इसका कारण यह है कि ओपनजीएल बफ़र स्थानीय रूप से संग्रहीत किए जाते हैं। वही SDL2 के साथ देखा जा सकता है: OpenGL के बिना एक कार्यक्रम 1.1 एमबी की खपत करता है, और इसके साथ ही 14 एमबी होता है।
WxWidgets और LCL को इस तुलना में अच्छी तरह से रखा गया है। इस तथ्य के बावजूद कि वे जीयूआई के लिए अन्य उपकरणों पर रैपर हैं, संसाधनों की लागत न्यूनतम है। मैं Gtk + से बैकएंड को स्थानांतरित करने की संभावना के विचार से प्रभावित हूं, उदाहरण के लिए, Qt को, जिससे उपकरणों से स्वतंत्रता की गारंटी मिलती है।
मैं Nuklear को भी हाइलाइट करूँगा, बस, क्योंकि, यह मुझे लगता है, इसमें बहुत अच्छा GUI तत्काल रेंडरिंग मोड है। यदि आप कच्चे एक्स 11 फ्रेमबफ़र के उपयोग से भ्रमित नहीं हैं, तो आपका एकल-विंडो एप्लिकेशन केवल 0.624 एमबी पर कब्जा करेगा, जो बहुत प्रभावशाली दिखता है।
निष्कर्ष
यदि आप यहां किसी भी सामान्यीकृत निष्कर्ष को देखने की उम्मीद कर रहे थे, तो, मुझे डर है, मुझे आपको निराश करना होगा।