c# - क्या किसी के पास एक्समरिन सी#और जावा में लिखे गए एंड्रॉइड ऐप्स के प्रदर्शन की तुलना में बेंचमार्क(कोड और परिणाम)हैं?




java android xamarin dot42 (7)

यहां कुछ सूचनाएं दी गई हैं जिन्हें मैंने देशी, ज़ैमरिन और ज़ैमरिन के बीच एक और परीक्षण में पाया है। दो निम्नलिखित उपकरणों पर फर्म समाधान (परीक्षणों में आईओएस प्रदर्शन भी शामिल है):

सैमसंग गैलेक्सी ए 7 : एंड्रॉइड ओएस संस्करण: 6.0 सेंट्रल प्रोसेसिंग यूनिट: ऑक्टा-कोर 1.9 गीगाहर्ट्ज कॉर्टेक्स-ए 53 रैम: 3 जीबी डिस्प्ले रेज़ोल्यूशन: 1920 × 1080

आईफोन 6 एस : आईओएस संस्करण: 10.3.3 केंद्रीय प्रसंस्करण इकाई: ड्यूल-कोर 1.84 गीगाहर्ट्ज ट्विस्टर रैम: 2 जीबी डिस्प्ले रेज़ोल्यूशन: 1334 × 750

तुलना कुछ सामान्य विशेषताओं पर की जाती है, प्रत्येक व्यक्ति अपने आवेदन के साथ:

- Basic “Hello World”
- REST API
- JSON Serialization/Deserialization
- Photo Loading
- SQL Database Insert and Get All

प्रत्येक परीक्षण को कई बार दोहराया जाता है, ग्राफ औसत परिणाम दिखाते हैं।

नमस्ते दुनिया

बाकी एपीआई

ऐप के लिए आरईएसटी एपीआई के माध्यम से अनुरोध भेजने के लिए किए गए समय को मापने के लिए परीक्षणों का सेट और OpenWeatherMap API का उपयोग करके, आगे डेटा प्रोसेसिंग के बिना प्रतिक्रिया प्राप्त करें।

JSON ऑपरेशंस टेस्ट सभी Xamarin ऐप्स में JSON ऑब्जेक्ट्स को क्रमबद्ध और deserialize करने के लिए Newtonsoft Json.net ढांचे का उपयोग करके बनाया गया। दो एंड्रॉइड सीरियलाइजेशन और deserialization दो जावा पुस्तकालयों का उपयोग कर परीक्षण किया: जैक्सन और जीएसओएन।

दो रन बनाए जाते हैं, स्क्रैच से पहला और कैश किए गए इंफोस और ऑपरेशंस के साथ दूसरा

पहला रन :

(मूल आईओएस जेएसओएन ऑपरेशंस इस टेस्ट बीटीडब्ल्यू को मार रहा है, और एक्समरिन इसे दूसरे में शामिल करता है)

फोटो ऑपरेशंस

तीन अलग-अलग संकल्पों वाली छवियों पर पहला भार:

Resolution – 858×569, Size – 868Kb
Resolution – 2575×1709, Size – 8Mb
Resolution – 4291×2848, Size – 28.9Mb

इस परीक्षण के लिए Xamarin.Forms के परिणाम के बारे में कुछ अनिश्चित लग रहा था, इसलिए यह ग्राफ में शामिल नहीं है।

SQLite संचालन

दो परिचालनों का परीक्षण किया गया:

BulkInsert: Loading rows of data into a database table.
GetAll: Retrieving all data from the database.

10,000 रिकॉर्ड वाले डेटाबेस के साथ। सभी परिचालनों को आंतरिक रूप से उपकरणों पर संसाधित किया गया था।

Xamarin मूल (Xamarin.iOS / Xamarin.Android) खुद को देशी कोड के बजाय अच्छे विकल्प के रूप में दिखाते हैं, जबकि Xamarin.Forms कई मामलों में धीमा लगता है, लेकिन यह वास्तव में सरल अनुप्रयोगों को तेजी से विकसित करने के लिए वास्तव में एक अच्छा समाधान हो सकता है।

पूरा स्रोत इस स्रोत से आता है:

https://www.altexsoft.com/blog/engineering/performance-comparison-xamarin-forms-xamarin-ios-xamarin-android-vs-android-and-ios-native-applications/

मुझे अपना जवाब बढ़ाने के लिए स्पष्टीकरण देने के लिए धन्यवाद, उम्मीद है कि इससे थोड़ा सा मदद मिलेगी :)

मैं ज़ैमरिन के दावों में आया था कि एंड्रॉइड पर उनके मोनो कार्यान्वयन और उनके सी # संकलित ऐप्स जावा कोड से तेज़ हैं। क्या किसी ने इस तरह के दावों को सत्यापित करने के लिए विभिन्न एंड्रॉइड प्लेटफ़ॉर्म पर बहुत समान जावा और सी # कोड पर वास्तविक मानक प्रदर्शन किए हैं, कोड और परिणाम पोस्ट कर सकते हैं?

18 जून, 2013 को जोड़ा गया

चूंकि कोई जवाब नहीं था और दूसरों द्वारा किए गए ऐसे बेंचमार्क नहीं मिल पाए, इसलिए मैंने अपने स्वयं के परीक्षण करने का फैसला किया। दुर्भाग्यवश, मेरा प्रश्न "लॉक" बना हुआ है, इसलिए मैं इसे उत्तर के रूप में पोस्ट नहीं कर सकता, केवल प्रश्न संपादित कर सकता हूं। कृपया इस प्रश्न को फिर से खोलने के लिए वोट दें। सी # के लिए, मैंने Xamarin.Android ver का उपयोग किया। 4.7.0 9 001 (बीटा)। स्रोत कोड, परीक्षण के लिए उपयोग किए जाने वाले सभी डेटा, और संकलित एपीके पैकेज गिटहब पर हैं:

जावा: https://github.com/gregko/TtsSetup_Java

सी #: https://github.com/gregko/TtsSetup_C_sharp

अगर कोई अन्य उपकरणों या अनुकरणकों पर अपने परीक्षण दोहराना चाहेगा, तो मुझे भी परिणाम सीखने में दिलचस्पी होगी।

मेरे परीक्षण से परिणाम

मैंने अपनी वाक्य निकालने वाला वर्ग सी # (मेरे @ वोइस अलाउड रीडर ऐप से) पर पोर्ट किया और अंग्रेजी, रूसी, फ्रेंच, पोलिश और चेक भाषाओं में 10 एचटीएमएल फाइलों पर कुछ परीक्षण चलाए। प्रत्येक रन सभी 10 फाइलों पर 5 बार किया गया था, और 3 अलग-अलग उपकरणों और एक एमुलेटर के लिए कुल समय नीचे पोस्ट किया गया है। मैंने परीक्षण किया "रिलीज" केवल डिबगिंग सक्षम किए बिना बनाता है।

एचटीसी नेक्सस वन एंड्रॉइड 2.3.7 (एपीआई 10) - साइननोजेड रॉम

जावा: ग्रांड कुल समय (5 रन): 12361 एमएस, फ़ाइल पढ़ने के कुल के साथ: 13304 एमएस

सी #: ग्रैंड कुल समय (5 रन): 17504 एमएस, फ़ाइल पढ़ने के कुल के साथ: 17 9 5 एमएस

सैमसंग गैलेक्सी एस 2 एसएचजी-आई777 (एंड्रॉइड 4.0.4, एपीआई 15) - साइननोजेड रॉम

जावा: ग्रांड कुल समय (5 रन): 8947 एमएस, फ़ाइल पढ़ने के कुल के साथ: 9186 एमएस

सी #: ग्रांड कुल समय (5 रन): 9884 एमएस, फ़ाइल पढ़ने के कुल के साथ: 10247 एमएस

सैमसंग जीटी-एन 7100 (एंड्रॉइड 4.1.1 जेलीबीन, एपीआई 16) - सैमसंग रॉम

जावा: ग्रैंड कुल समय (5 रन): 9742 एमएस, फ़ाइल पढ़ने के कुल के साथ: 10111 एमएस

सी #: ग्रैंड कुल समय (5 रन): 1045 9 एमएस, फ़ाइल पढ़ने के कुल के साथ: 10696 एमएस

एम्यूलेटर - इंटेल (एंड्रॉइड 4.2, एपीआई 17)

जावा: ग्रैंड कुल समय (5 रन): 26 99 एमएस, फ़ाइल पढ़ने के कुल के साथ: 3127 एमएस

सी #: ग्रैंड कुल समय (5 रन): 2049 एमएस, फ़ाइल पढ़ने के कुल के साथ: 2182 एमएस

एम्यूलेटर - इंटेल (एंड्रॉइड 2.3.7, एपीआई 10)

जावा: ग्रैंड कुल समय (5 रन): 2 9 2 9 एमएस, फ़ाइल पढ़ने के कुल के साथ: 35 9 1 एमएस

सी #: ग्रैंड कुल समय (5 रन): 2049 एमएस, फ़ाइल पढ़ने के कुल के साथ: 2257 एमएस

एम्यूलेटर - आर्म (एंड्रॉइड 4.0.4, एपीआई 15)

जावा: ग्रांड कुल समय (5 रन): 41751 एमएस, फ़ाइल पढ़ने के कुल के साथ: 43866 एमएस

सी #: ग्रैंड कुल समय (5 रन): 44136 एमएस, फ़ाइल पढ़ने के कुल के साथ: 4510 9 एमएस

छोटी चर्चा

मेरे टेस्ट कोड में मुख्य रूप से टेक्स्ट पार्सिंग, प्रतिस्थापन और रेगेक्स खोज शामिल हैं, शायद अन्य कोड (जैसे अधिक संख्यात्मक परिचालन) के लिए परिणाम अलग होंगे। एआरएम प्रोसेसर के साथ सभी उपकरणों पर, जावा Xamarin सी # कोड से बेहतर प्रदर्शन किया। सबसे बड़ा अंतर एंड्रॉइड 2.3 के तहत था, जहां सी # कोड लगभग चल रहा था। जावा गति का 70%।

इंटेल एमुलेटर (इंटेल एचएएक्स तकनीक के साथ, एमुलेटर तेजी से वर्ड मोड में चलता है), एक्समरिन सी # कोड जावा से बहुत तेज़ नमूना कोड चलाता है - लगभग 1.35 समय तेज। हो सकता है कि मोनो वर्चुअल मशीन कोड और लाइब्रेरी इंटेल पर एआरएम की तुलना में बेहतर अनुकूलित हों?

8 जुलाई, 2013 को संपादित करें

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

जेनिमोशन एमुलेटर - इंटेल (एंड्रॉइड 4.1.1, एपीआई 16)

जावा: ग्रैंड कुल समय (5 रन): 2069 एमएस, फ़ाइल पढ़ने के कुल के साथ: 2248 एमएस

सी #: ग्रैंड कुल समय (5 रन): 1543 एमएस, फ़ाइल पढ़ने के कुल के साथ: 1642 एमएस

मैंने तब देखा कि Xamarin.Android बीटा, संस्करण 4.7.11 के लिए एक अद्यतन था, रिलीज नोट्स के साथ मोनो रनटाइम में कुछ बदलावों का भी उल्लेख किया गया। कुछ एआरएम उपकरणों का त्वरित परीक्षण करने का फैसला किया, और बड़े आश्चर्य - सी # संख्या में सुधार हुआ:

बीएन नुक्क एक्सडी +, एआरएम (एंड्रॉइड 4.0)

जावा: ग्रांड कुल समय (5 रन): 8103 एमएस, फ़ाइल पढ़ने के कुल के साथ: 8569 एमएस

सी #: ग्रैंड कुल समय (5 रन): 7951 एमएस, फ़ाइल पढ़ने के कुल के साथ: 8161 एमएस

वाह! सी # अब जावा से बेहतर है? मेरे गैलेक्सी नोट 2 पर परीक्षण दोहराने का फैसला किया:

सैमसंग गैलेक्सी नोट 2 - एआरएम (एंड्रॉइड 4.1.1)

जावा: ग्रांड कुल समय (5 रन): 9675 एमएस, फ़ाइल पढ़ने के कुल के साथ: 10028 एमएस

सी #: ग्रैंड कुल समय (5 रन): 9911 एमएस, फ़ाइल पढ़ने के कुल के साथ: 10104 एमएस

यहां सी # केवल थोड़ी धीमी प्रतीत होती है, लेकिन इन नंबरों ने मुझे रोक दिया: क्यों नूक एचडी + पर समय लंबा है, भले ही नोट 2 में तेज प्रोसेसर है? उत्तर: पावर सेविंग मोड। नुक्कड़ पर, यह नोट 2 - सक्षम पर अक्षम कर दिया गया था। पावर सेविंग मोड अक्षम के साथ परीक्षण करने का निर्णय लिया गया (जैसा सक्षम है, यह प्रोसेसर की गति को भी सीमित करता है):

सैमसंग गैलेक्सी नोट 2 - एआरएम (एंड्रॉइड 4.1.1), पावर सेविंग अक्षम

जावा: ग्रैंड कुल समय (5 रन): 7153 एमएस, फ़ाइल पढ़ने के कुल के साथ: 745 9 एमएस

सी #: ग्रैंड कुल समय (5 रन): 6906 एमएस, फ़ाइल पढ़ने के कुल के साथ: 7070 एमएस

अब, आश्चर्य की बात है, सी # एआरएम प्रोसेसर पर जावा से थोड़ा तेज है। बड़ा सुधार!

12 जुलाई, 2013 को संपादित करें

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

जावा: ग्रांड कुल समय (5 रन): 32 9 2 एमएस, फ़ाइल पढ़ने के कुल के साथ: 3454 एमएस

मूल अंगूठे: ग्रैंड कुल समय (5 रन): 537 एमएस, फ़ाइल पढ़ने के कुल के साथ: 657 एमएस

मूल भुजा: ग्रैंड कुल समय (5 रन): 458 एमएस, फ़ाइल पढ़ने के कुल के साथ: 587 एमएस

ऐसा लगता है कि मेरे विशेष परीक्षण के लिए, मूल कोड जावा से 6 से 7 गुना तेज है। चेतावनी: एंड्रॉइड पर std :: regex वर्ग का उपयोग नहीं कर सका, इसलिए पैराग्राफ ब्रेक या एचटीएमएल टैग की तलाश में अपनी खुद की विशेष दिनचर्या लिखनी पड़ी। रीगेक्स का उपयोग कर पीसी पर एक ही कोड के मेरे प्रारंभिक परीक्षण, जावा से लगभग 4 से 5 गुना तेज थे।

ओह! Char * या wchar * पॉइंटर्स के साथ फिर से कच्ची मेमोरी जागना, मुझे तुरंत 20 साल की उम्र महसूस हुई! :)

15 जुलाई, 2013 को संपादित करें

(कृपया Dot42 के साथ बेहतर परिणामों के लिए, 7/30/2013 के संपादन के साथ नीचे देखें)

कुछ कठिनाई के साथ मैंने अपने सी # परीक्षणों को पोर्ट 42 (संस्करण 1.0.1.71 बीटा), एंड्रॉइड के लिए एक और सी # मंच पर बंदरगाह करने के लिए मैंग किया। प्रारंभिक परिणामों से पता चलता है कि इंटेल एंड्रॉइड एमुलेटर पर, डॉट 42 कोड Xamarin C # (v। 4.7.11) की तुलना में लगभग 3x (3 गुना) धीमा है। एक समस्या यह है कि Dot42 में System.Text.RegularExpressions क्लास में स्प्लिट () फ़ंक्शन नहीं है जिसे मैंने ज़ैमरिन परीक्षणों में उपयोग किया था, इसलिए मैंने Java.Util.Regex क्लास का उपयोग किया, और Java.Util.Regex.Pattern.Split ( ), इसलिए कोड में इस विशेष स्थान में यह छोटा अंतर है। यद्यपि एक बड़ी समस्या नहीं होनी चाहिए। Dot42 Dalvik (डीईएक्स) कोड के लिए संकलित करता है, इसलिए यह जावा पर एंड्रॉइड पर मूल रूप से सहयोग करता है, सी # से जावा तक एक्समेरिन जैसे महंगी इंटरऑप की आवश्यकता नहीं है।

बस तुलना के लिए, मैं एआरएम उपकरणों पर भी परीक्षण चलाता हूं - यहां डॉट 42 कोड ज़ैमरिन सी # की तुलना में "केवल" 2x धीमी है। मेरे परिणाम यहां दिए गए हैं:

एचटीसी नेक्सस वन एंड्रॉइड 2.3.7 (एआरएम)

जावा: ग्रांड कुल समय (5 रन): 12187 एमएस, फ़ाइल पढ़ने के कुल के साथ: 13200 एमएस

एक्समरिन सी #: ग्रैंड कुल समय (5 रन): 13 9 35 एमएस, फ़ाइल पढ़ने के कुल के साथ: 14465 एमएस

डॉट 42 सी #: ग्रैंड कुल समय (5 रन): 26000 एमएस, फ़ाइल पढ़ने के कुल के साथ: 27168 एमएस

सैमसंग गैलेक्सी नोट 2, एंड्रॉइड 4.1.1 (एआरएम)

जावा: ग्रैंड कुल समय (5 रन): 68 9 5 एमएस, फ़ाइल पढ़ने के कुल के साथ: 7275 एमएस

एक्समरिन सी #: ग्रैंड कुल समय (5 रन): 6466 एमएस, फ़ाइल पढ़ने के कुल के साथ: 6720 एमएस

डॉट 42 सी #: ग्रांड कुल समय (5 रन): 11185 एमएस, कुल फ़ाइल पढ़ने के साथ: 11843 एमएस

इंटेल एमुलेटर, एंड्रॉइड 4.2 (x86)

जावा: ग्रांड कुल समय (5 रन): 2389 एमएस, फ़ाइल पढ़ने के कुल के साथ: 2770 एमएस

एक्समरिन सी #: ग्रांड कुल समय (5 रन): 1748 एमएस, फ़ाइल पढ़ने के कुल के साथ: 1 9 33 एमएस

डॉट 42 सी #: ग्रैंड कुल समय (5 रन): 5150 एमएस, फ़ाइल पढ़ने के कुल के साथ: 545 9 एमएस

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

अद्यतन 7/26/2013

बस एक त्वरित अपडेट, नवीनतम Xamarin.Android 4.8 के साथ बेंचमार्क ऐप्स द्वारा पुन: संकलित, और आज भी जारी किए गए dot42 1.0.1.72 अपडेट के साथ - पहले रिपोर्ट किए गए परिणामों से कोई महत्वपूर्ण बदलाव नहीं।

अद्यतन 7/30/2013 - dot42 के लिए बेहतर परिणाम

मेरे जावा कोड के सी # को रॉबर्ट के (डॉट 42 निर्माता) पोर्ट के साथ दोबारा परीक्षण किया गया। प्रारंभिक रूप से एक्समेरिन के लिए किए गए मेरे सी # पोर्ट में, मैंने कुछ मूल जावा कक्षाओं को बदल दिया, जैसे ListArray, सी # के मूल निवासी सूची वर्ग के साथ, रॉबर्ट के पास मेरा डॉट 42 स्रोत कोड नहीं था, इसलिए उसने इसे फिर से जावा से पोर्ट किया और मूल जावा कक्षाओं का उपयोग किया ऐसे स्थान, जो डॉट 42 को लाभान्वित करते हैं, मुझे लगता है क्योंकि यह जावा की तरह डाल्विक वीएम में चलता है, और मोनो में नहीं, जैसे ज़मरिन। अब डॉट 42 परिणाम बहुत बेहतर हैं। यहां मेरे परीक्षण से एक लॉग है:

7/30/2013 - Dot42 सी # में अधिक जावा कक्षाओं के साथ Dot42 परीक्षण

इंटेल एमुलेटर, एंड्रॉइड 4.2

डॉट 42, स्ट्रिंगबिल्डर का उपयोग कर ग्रेग का कोड। जगह () (ज़मरिन में):
ग्रैंड कुल समय (5 रन): 3646 एमएस, फ़ाइल पढ़ने के कुल के साथ: 3830 एमएस

डॉट 42, स्ट्रिंग का उपयोग कर ग्रेग कोड। रिप्लेस () (जावा और रॉबर्ट के कोड में):
ग्रैंड कुल समय (5 रन): 3027 एमएस, फ़ाइल पढ़ने के कुल के साथ: 3206 एमएस

डॉट 42, रॉबर्ट का कोड:
ग्रैंड कुल समय (5 रन): 1781 एमएस, फ़ाइल पढ़ने के कुल के साथ: 1 999 एमएस

Xamarin:
ग्रैंड कुल समय (5 रन): 1373 एमएस, फ़ाइल पढ़ने के कुल के साथ: 1505 एमएस

जावा:
ग्रैंड कुल समय (5 रन): 1841 एमएस, फ़ाइल पढ़ने के कुल के साथ: 2044 एमएस

एआरएम, सैमसंग गैलेक्सी नोट 2, पावर सेविंग ऑफ, एंड्रॉइड 4.1.1

डॉट 42, स्ट्रिंगबिल्डर का उपयोग कर ग्रेग का कोड। जगह () (ज़मरिन में):
ग्रैंड कुल समय (5 रन): 10875 एमएस, फ़ाइल पढ़ने के कुल के साथ: 11280 एमएस

डॉट 42, स्ट्रिंग का उपयोग कर ग्रेग कोड। रिप्लेस () (जावा और रॉबर्ट के कोड में):
ग्रैंड कुल समय (5 रन): 9 710 एमएस, फ़ाइल पढ़ने के कुल के साथ: 100 9 7 एमएस

डॉट 42, रॉबर्ट का कोड:
ग्रैंड कुल समय (5 रन): 6279 एमएस, फ़ाइल पढ़ने के कुल के साथ: 6622 एमएस

Xamarin:
ग्रैंड कुल समय (5 रन): 6201 एमएस, फ़ाइल पढ़ने के कुल के साथ: 6476 एमएस

जावा:
ग्रैंड कुल समय (5 रन): 7141 एमएस, फ़ाइल पढ़ने के कुल के साथ: 7479 एमएस

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

ग्रेग


हाँ, एक्समरिन की मोनो वर्चुअल मशीन एंड्रॉइड में इस्तेमाल किए गए Google के Dalvik से अधिक प्रभावशाली है। मैंने जावा डेलविक के खिलाफ मोनो के माध्यम से एंड्रॉइड के सी # पोर्ट को बेंचमार्क करने के लिए एचटीसी फ्लाईर और एसर आइकोनिया टैब टैबलेट के साथ इसका परीक्षण किया है, जिसमें एंड्रॉइड अच्छी तरह से सी # कार्यान्वयन और जावा-आधारित डाल्विक को वास्तव में उछाल दिया गया है।



हमने हाल ही में एक ऐप के लिए ज़ैमरिन का उपयोग करके जांच की है। हमने सी # कोड का उपयोग किया जिसे हमने पहले से ही हमारे ऐप के विंडोज आरटी संस्करण के लिए लिखा था। एंड्रॉइड संस्करण के लिए कुछ विशिष्ट विवरणों को फिर से लिखा जाना था।

हमने जो पाया है वह है कि एक्समरिन सी # में I / O जावा से लगभग 2x धीमी है। हमारा ऐप भारी I / O बाध्य है। हमने अभी तक इसका कारण नहीं खोजा है, लेकिन फिलहाल हम मानते हैं कि यह मार्शलिंग के कारण है। जबकि हम ज्यादातर समय मोनो वीएम के अंदर रहने की कोशिश करते हैं, हम नहीं जानते कि मोनो वास्तव में डिस्क तक कैसे पहुंचता है।

यह भी बता रहा है कि हमारा सी # कोड SQLite.NET ( https://github.com/praeclarum/sqlite-net ) का उपयोग करता है। SQLite.NET कोड का उपयोग करने वाले समान fetches एंड्रॉइड के जावा SQLite wrapper का उपयोग करने से 2x धीमी हैं। स्रोत कोड को देखने के बाद, यह सीधे सी। डीएल से बांधता प्रतीत होता है, इसलिए मुझे नहीं पता कि यह इतना धीमा क्यों है। एक संभावना यह है कि मूल से जावा तक मार्शल स्ट्रिंग्स एंड्रॉइड पर तेज हो सकती हैं, सी # के मूल से ज़ैमरिन पर है।


प्रदर्शन

प्रदर्शन एक अस्पष्ट शब्द है यदि आप प्रदर्शन से क्या मतलब परिभाषित नहीं करते हैं, यदि यह सादा गणना प्रदर्शन है तो गणना की प्रकृति के आधार पर ज़ैमरिन जावा से तेज हो सकती है।

एंड्रॉइड नेटिवली कोड को निष्पादित करने के लिए मल्टी फॉर्म के साथ आता है:

  • रेंडरस्क्रिप्ट (सीपीयू और जीपीयू)
  • जावा (एसडीके)
  • सी ++ (एनडीके)
  • ओपनजीएल (जीपीयू)

यह स्पष्ट है कि कोड को निष्पादित करते समय समाधान जितना तेज़ होगा उतना तेज़ होगा। एक रन-टाइम आधारित भाषा कभी भी ऐसी भाषा को नहीं हराएगी जो सीपीयू पर सीधे चलती है।

लेकिन दूसरी तरफ यदि आप वास्तविक जीवन उपयोग प्रदर्शन को मापना चाहते हैं तो जावा एक्सपेरिन तेज़ी से तेजी से जा रहा है।

Xamarin और यह धीमा क्यों हो सकता है

सादा पुराने जावा अनुप्रयोगों के साथ ज़ैमरिन की तुलना करते समय, एक्समरिन के लिए प्रदर्शन बहुत तेज हो सकता है क्योंकि यह धीमा हो सकता है।

वास्तविक दुनिया में उदाहरण के लिए ज़ैमरिन अनुप्रयोग जावा अनुप्रयोगों की तुलना में धीमे होने की संभावना है क्योंकि कई एंड्रॉइड / जावा (सिस्टम) कॉलों को तथाकथित बाइंडिंग का उपयोग करके ज़ैमरिन रन-टाइम से और उसके लिए प्रतिनिधि होने की आवश्यकता होती है।

कुछ अलग-अलग प्रकार के बाइंडिंग हैं जो जानना महत्वपूर्ण हैं:

  • जेएनआई (जावा नेटिव इंटरफेस): बाइंडिंग जावा कोड (एसडीके) और देशी सी ++ कोड (एनडीके) के बीच इंटरफेस करने के लिए कई एंड्रॉइड अनुप्रयोगों में उपयोग किया जाता है।
  • एमसीडब्ल्यू (प्रबंधित कॉल करने योग्य लपेटें): एक बाध्यकारी जो एक्समेरिन में प्रबंधित सी # कोड से जावा कोड (एंड्रॉइड रन-टाइम) से इंटरफेस करने के लिए उपलब्ध है।
  • एसीडब्ल्यू (एंड्रॉइड कॉल करने योग्य रैपर): एक बाध्यकारी जो जावा कोड (एंड्रॉइड रन-टाइम) से प्रबंधित सी # कोड में इंटरफेस करने के लिए ज़ैमरिन में उपलब्ध है।

यहां एमसीडब्ल्यू और एसीडब्ल्यू पर अधिक जानकारी: https://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_1_-_understanding_the_xamarin_mobile_platform/

बाइंडिंग प्रदर्शन के मामले में बहुत महंगा है। जावा से सी ++ विधि को आमंत्रित करने से कॉलिंग समय में एक बड़ा ओवरहेड जोड़ता है, सी ++ के भीतर से सी ++ विधि को कॉल करना कई बार तेज़ होता है।

किसी ने जेएनआई कॉल लागत पर औसतन कितने जावा ऑपरेशंस की गणना करने के लिए प्रदर्शन परीक्षण किया: जेएनआई कॉल करने के मात्रात्मक ओवरहेड क्या है?

लेकिन न केवल जेएनआई कॉल महंगे हैं इसलिए एमसीडब्ल्यू और एसीडब्ल्यू से कॉल करने के लिए कहा जाता है। वास्तविक दुनिया Xamarin अनुप्रयोग बाइंडिंग का उपयोग करके कई कॉल करते हैं और Xamarin एप्लिकेशन के इस असली दुनिया के उपयोग के कारण एक सादे पुराने जावा एप्लिकेशन की तुलना में धीमे (और सामान्य रूप से) धीमे हो सकते हैं। हालांकि Xamarin एप्लिकेशन को डिज़ाइन किए जाने के तरीके के आधार पर यह बहुत संभावना है कि उपयोगकर्ता अंतर को भी ध्यान में रखेगा।

टीएलडीआर / निष्कर्ष: Xamarin को अल-प्रकार के बाइंडिंग का उपयोग करने की आवश्यकता है, जो कि समय पर महंगा है।

बाइंडिंग के अलावा, वास्तविक दुनिया के प्रदर्शन के बारे में बात करते समय कई अन्य कारक शामिल हैं, उदाहरण के लिए: द्विआधारी का आकार, स्मृति में ऐप लोड करना, I / O संचालन और कई अन्य। इनमें से कुछ चीजों की जांच करने वाला एक ब्लॉग पोस्ट यहां पाया जा सकता है: https://magenic.com/thinking/mobile-development-platform-performance-part-2-native-cordova-classic-xamarin-xamarin-forms


यह एक और अधिक अद्यतन ब्लॉग पोस्ट है जिसे मैं आपके साथ साझा करना चाहता हूं । वह ज़ामरिन से मूल कोड और कॉर्डोवा दोनों आईओएस और एंड्रॉइड पर तुलना करता है।

संक्षेप में, ज़ैमरिन देशी कोड से कभी-कभी बेहतर प्रदर्शन करता है। उन्होंने ऐप आकार, लोड समय, Azure सेवा और प्राइम संख्या गणना से एक सूची लोड करने का परीक्षण किया।

का आनंद लें!

संपादित करें: मैंने मृत लिंक को अपडेट किया और मैंने देखा कि एक भाग 2 है


यदि सभी अन्य विफल होते हैं। बस इंटेल HAXM ज़िप मैन्युअल रूप से डाउनलोड करने, निकालने और स्थापित करने का प्रयास करें। here जांचें

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

यदि आप मुझसे पूछें तो यह एंड्रॉइड एमुलेटर में काफी सभ्य और बहुत ही उल्लेखनीय सुधार है।







c# java android xamarin dot42