আমি জামরিনের দাবিতে এসেছি যে অ্যান্ড্রয়েডে তাদের মনো বাস্তবায়ন এবং তাদের সি # সংকলিত অ্যাপ্লিকেশনগুলি জাভা কোডের চেয়ে দ্রুত। এই জাতীয় দাবিগুলি যাচাই করার জন্য কেউ কি বিভিন্ন অ্যান্ড্রয়েড প্ল্যাটফর্মগুলিতে খুব অনুরূপ জাভা এবং সি # কোডে প্রকৃত বেঞ্চমার্ক সম্পাদন করেছে, কোড এবং ফলাফল পোস্ট করতে পারে?
18 ই জুন, 2013 যোগ করা হয়েছে
যেহেতু কোনও উত্তর ছিল না এবং অন্যরা এই জাতীয় মানদণ্ডগুলি খুঁজে পেতে পারেনি, তাই আমার নিজের পরীক্ষা করার সিদ্ধান্ত নিয়েছে। দুর্ভাগ্যক্রমে, আমার প্রশ্নটি "তালাবন্ধ" রয়ে গেছে তাই আমি উত্তর হিসাবে এটি পোস্ট করতে পারি না, কেবলমাত্র প্রশ্নটি সম্পাদনা করুন। এই প্রশ্নটি পুনরায় খুলতে দয়া করে ভোট দিন। সি # এর জন্য, আমি জামারিন.এন্ড্রয়েড ভেরি ব্যবহার করেছি। 4.7.09001 (বিটা) উত্স কোড, আমি APK প্যাকেজগুলি পরীক্ষার জন্য এবং সংকলনের জন্য ব্যবহার করেছি এমন সমস্ত ডেটা গিটহাবে রয়েছে:
জাভা: https://github.com/gregko/TtsSetup_Java
সি #: https://github.com/gregko/TtsSetup_C_sharp
কেউ যদি অন্য ডিভাইস বা ইমুলেটরগুলিতে আমার পরীক্ষাগুলির পুনরাবৃত্তি করতে চান তবে আমি ফলাফলগুলিও জানতে আগ্রহী হব।
আমার পরীক্ষার ফলাফল
আমি আমার বাক্য নিষ্কাশনকারী শ্রেণিকে সি # তে পোর্ট করেছি (আমার @ ভয়েস অলৌড রিডার অ্যাপ্লিকেশন থেকে) এবং ইংরেজি, রাশিয়ান, ফরাসী, পোলিশ এবং চেক ভাষায় 10 টি HTML ফাইলের জন্য কিছু পরীক্ষা চালিয়েছি। প্রতিটি রান সমস্ত 10 ফাইলে 5 বার সম্পাদিত হয়েছিল এবং 3 টি পৃথক ডিভাইস এবং একটি এমুলেটরের জন্য মোট সময় নীচে পোস্ট করা হয়েছে। আমি "রিলিজ" বিল্ডগুলি কেবলমাত্র ডিবাগিং সক্ষম না করেই পরীক্ষিত করেছি।
এইচটিসি নেক্সাস ওয়ান অ্যান্ড্রয়েড 2.3.7 (এপিআই 10) - সায়ানোজেনমড রম
জাভা: গ্র্যান্ড টোটাল সময় (5 রান): 12361 এমএস, ফাইল পঠন মোট সহ: 13304 এমএস
সি #: গ্র্যান্ড টোটাল টাইম (5 রান): 17504 এমএস, ফাইল পঠন মোট সহ: 17956 এমএস
স্যামসং গ্যালাক্সি এস 2 এসজিএইচ-আই 777 (অ্যান্ড্রয়েড 4.0.4, এপিআই 15) - সায়ানোজেনমড রম
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): 8947 এমএস, ফাইল পড়ার সাথে মোট: 9186 এমএস
সি #: গ্র্যান্ড টোটাল টাইম (5 রান): 9884 এমএস, ফাইল পড়ার সাথে মোট: 10247 এমএস
স্যামসাং জিটি-এন 7100 (অ্যান্ড্রয়েড 4.1.1 জেলিবিয়ান, এপিআই 16) - স্যামসুং রম
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): 9742 এমএস, ফাইল পড়ার সাথে মোট: 10111 এমএস
সি #: গ্র্যান্ড টোটাল টাইম (5 রান): 10459 এমএস, ফাইল পঠন মোট সহ: 10696 এমএস
এমুলেটর - ইন্টেল (অ্যান্ড্রয়েড 4.2, এপিআই 17)
জাভা: গ্র্যান্ড টোটাল টাইম (৫ রান): ২ reading৯৯৯ এমএস, মোট ফাইল রিডিং সহ: ৩27২27 এমএস
সি #: গ্র্যান্ড মোট সময় (5 রান): ফাইল পঠন সহ মোট 2049 এমএস: 2182 এমএস
এমুলেটর - ইন্টেল (অ্যান্ড্রয়েড 2.3.7, এপিআই 10)
জাভা: গ্র্যান্ড মোট সময় (5 রান): ফাইল পঠন সহ মোট 2992 এমএস, 3591 এমএস
সি #: গ্র্যান্ড মোট সময় (5 রান): ফাইল পঠন সহ মোট 2049 এমএস, 2257 এমএস
এমুলেটর - আর্ম (অ্যান্ড্রয়েড 4.0.4, এপিআই 15)
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): ফাইল পঠন মোট সহ: 41751 এমএস, 43866 এমএস
সি #: গ্র্যান্ড মোট সময় (5 রান): 44136 এমএস, ফাইলের পঠন মোট সহ: 45109 এমএস
সংক্ষিপ্ত আলোচনা
আমার পরীক্ষার কোডটিতে মূলত পাঠ্য বিশিষ্টকরণ, প্রতিস্থাপন এবং রেজেক্স অনুসন্ধান রয়েছে, সম্ভবত অন্যান্য কোডের জন্য (যেমন আরও সংখ্যাসূচক ক্রিয়াকলাপ) ফলাফলগুলি ভিন্ন হবে। এআরএম প্রসেসরযুক্ত সমস্ত ডিভাইসে জাভা জামিন সি # কোডের চেয়ে আরও ভাল পারফর্ম করেছে। বৃহত্তম পার্থক্যটি অ্যান্ড্রয়েড ২.৩ এর অধীনে ছিল, যেখানে সি # কোড প্রায় চালিত হয়। জাভা গতির 70%।
ইন্টেল এমুলেটরটিতে (ইনটেল হ্যাক্স প্রযুক্তির সাথে, এমুলেটর দ্রুত পারফেক্ট মোডে চলে), জামারিন সি # কোডটি আমার নমুনা কোডটি জাভা থেকে অনেক বেশি দ্রুত চালায় - প্রায় 1.35 বার দ্রুত। এএমএমের চেয়ে মনো ভার্চুয়াল মেশিন কোড এবং লাইব্রেরিগুলি ইন্টেলের চেয়ে আরও ভাল?
জুলাই 8, 2013 সম্পাদনা করুন
আমি সবেমাত্র জেনিমোশন অ্যান্ড্রয়েড এমুলেটর ইনস্টল করেছি, যা ওরাকল ভার্চুয়ালবক্সে সঞ্চালিত হয় এবং এটি আবার এআরএম প্রসেসরকে এমুলেটিং করে না, দেশীয় ইন্টেল প্রসেসর ব্যবহার করে। ইন্টেল HAX এমুলেটর হিসাবে, আবার সি # এখানে আরো দ্রুত চালিত হয়। আমার ফলাফলগুলি এখানে:
জিনমোশন ইমুলেটর - ইন্টেল (অ্যান্ড্রয়েড 4.1.1, এপিআই 16)
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): 2069 এমএস, ফাইলের পঠন মোট সহ: 2248 এমএস
সি #: গ্র্যান্ড মোট সময় (5 রান): 1544 এমএস, ফাইল পঠন মোট সহ: 1642 এমএস
আমি তখন লক্ষ্য করেছি যে জ্যামারিন.অ্যান্ড্রয়েড বিটা, সংস্করণ 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 এমএস, ফাইল পঠন মোট সহ: 7459 এমএস
সি #: গ্র্যান্ড টোটাল টাইম (5 রান): 6906 এমএস, ফাইল পঠন মোট সহ: 7070 এমএস
এখন আশ্চর্যজনকভাবে, সিআরটি এআরএম প্রসেসরের জাভা থেকেও কিছুটা দ্রুত। বড় উন্নতি!
12 জুলাই, 2013 সম্পাদনা করুন
আমরা সকলেই জানি যে, গতির জন্য কোনও কিছুই দেশীয় কোডকে আঘাত করে না, এবং জাভা বা সি # তে আমার বাক্য বিভাজনের পারফরম্যান্সে আমি সন্তুষ্ট নই, বিশেষত আমার এটির উন্নতি করতে হবে (এবং এটি এটিকে আরও ধীর করে তুলুন)। এটি সি ++ এ পুনরায় লেখার সিদ্ধান্ত নিয়েছে। আমার গ্যালাক্সি নোট 2-তে নেটিভ বনাম জাভার গতির তুলনা এখানে একটি ছোট (অর্থাত্ পূর্ববর্তী পরীক্ষার তুলনায় ফাইলগুলির একটি ছোট সেট, অন্যান্য কারণের জন্য), পাওয়ার সাশ্রয় মোড অক্ষম করে:
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): 3292 এমএস, ফাইল পঠন সহ মোট: 3454 এমএস
নেটিভ থাম্ব: গ্র্যান্ড টোটাল টাইম (৫ রান): ফাইল পড়ার সাথে মোট: 53 657 এমএস
নেটিভ আর্ম: গ্র্যান্ড মোট সময় (5 রান): 458 এমএস, ফাইল পঠন মোট সহ: 587 এমএস
আমার নির্দিষ্ট পরীক্ষার জন্য দেখে মনে হচ্ছে, নেটিভ কোডটি জাভা থেকে 6 থেকে 7 গুণ দ্রুত। ক্যাভ্যাট: অ্যান্ড্রয়েডে স্টাড :: রেজেক্স ক্লাস ব্যবহার করতে পারেনি, তাই অনুচ্ছেদে বিরতি বা এইচটিএমএল ট্যাগ অনুসন্ধানের জন্য আমার নিজস্ব বিশেষ রুটিন লিখতে হয়েছিল। রেগেক্স ব্যবহার করে পিসিতে একই কোডের আমার প্রাথমিক পরীক্ষাগুলি জাভা থেকে প্রায় 4 থেকে 5 গুণ বেশি দ্রুত ছিল।
রাম রাম! চর * বা উইচার * পয়েন্টার দিয়ে আবার কাঁচা স্মৃতি জাগানো, আমি তাত্ক্ষণিকভাবে 20 বছর কম অনুভব করেছি! :)
15 জুলাই, 2013 সম্পাদনা করুন
(ডট 42 এর সাথে আরও ভাল ফলাফলের জন্য দয়া করে নীচে দেখুন 7/30/2013 এর সম্পাদনাগুলি সহ)
কিছুটা অসুবিধা নিয়ে, আমি আমার সি # টেস্টগুলি অ্যান্ড্রয়েডের অন্য সি # প্ল্যাটফর্ম ডট 42 (সংস্করণ 1.0.1.71 বিটা) এ পোর্ট করতে পেরেছি। প্রাথমিক ফলাফলগুলি দেখায় যে ডট 42 কোডটি ইনটেল অ্যান্ড্রয়েড এমুলেটরটিতে জামারিন সি # (v। 4.7.11) এর চেয়ে প্রায় 3x (3 গুণ) ধীরে ধীরে। একটি সমস্যা হ'ল Dot42- এ System.Text.RegularExpressions ক্লাসে স্প্লিট () ফাংশন নেই যা আমি Xamarin টেস্টগুলিতে ব্যবহার করেছি, সুতরাং আমি এর পরিবর্তে জাভা.উটি.এল.গ্রেজ ক্লাস এবং জাভা.Util.Regex.Pattern.Split () ব্যবহার করেছি সুতরাং কোডের এই নির্দিষ্ট জায়গায় এই ছোট পার্থক্য রয়েছে। যদিও বড় সমস্যা হওয়া উচিত নয়। ডট 42 ডালভিক (ডেক্স) কোডে সংকলন করে, সুতরাং এটি জাভেরিনের মতো সি # থেকে জাভা পর্যন্ত ব্যয়বহুল ইন্টারপের প্রয়োজন হয় না, তাই এটি অ্যান্ড্রয়েডে জাভার সাথে সহযোগিতা করে।
কেবল তুলনা করার জন্য, আমি এআরএম ডিভাইসগুলিতেও পরীক্ষা চালাচ্ছি - এখানে ডট 42 কোডটি "কেবল" 2 এক্স Xamarin সি # এর চেয়ে ধীর গতিতে রয়েছে। আমার ফলাফলগুলি এখানে:
এইচটিসি নেক্সাস ওয়ান অ্যান্ড্রয়েড 2.3.7 (এআরএম)
জাভা: গ্র্যান্ড টোটাল সময় (5 রান): 12187 এমএস, ফাইল পঠন মোট সহ: 13200 এমএস
জামারিন সি #: গ্র্যান্ড মোট সময় (5 রান): মোট 1394 এমএস, ফাইল পঠন মোট সহ: 14465 এমএস
ডট 42 সি #: গ্র্যান্ড মোট সময় (5 রান): ফাইল পড়ার মোট সহ: 26000 এমএস, 27168 এমএস
স্যামসং গ্যালাক্সি নোট 2, অ্যান্ড্রয়েড 4.1.1 (এআরএম)
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): ফাইল পঠন সহ মোট 6895 এমএস, 7275 এমএস
জামারিন সি #: গ্র্যান্ড মোট সময় (5 রান): 6466 এমএস, ফাইল পঠন মোট সহ: 6720 এমএস
ডট 42 সি #: গ্র্যান্ড মোট সময় (5 রান): মোট ফাইল পড়ার সাথে 11185 এমএস, 11843 এমএস
ইন্টেল এমুলেটর, অ্যান্ড্রয়েড 4.2 (x86)
জাভা: গ্র্যান্ড টোটাল টাইম (5 রান): ফাইল পঠন সহ মোট 2389 এমএস, 2770 এমএস
জ্যামারিন সি #: গ্র্যান্ড মোট সময় (5 রান): 1748 এমএস, ফাইল পঠন সহ মোট: 1933 এমএস
ডট 42 সি #: গ্র্যান্ড মোট সময় (5 রান): ফাইল পঠন সহ মোট 5150 এমএস, 5459 এমএস
আমার কাছে এটিও আকর্ষণীয় ছিল যে Xamarin C # একটি নতুন এআরএম ডিভাইসে জাভার চেয়ে কিছুটা দ্রুত এবং পুরানো নেক্সাস ওয়ানটির থেকে কিছুটা ধীর। যদি কেউ এই পরীক্ষাগুলি চালাতে চান তবে দয়া করে আমাকে জানান এবং আমি গিটহাবের উত্সগুলি আপডেট করব। এটি ইন্টেল প্রসেসরের সাহায্যে একটি প্রকৃত অ্যান্ড্রয়েড ডিভাইস থেকে ফলাফলগুলি দেখতে আকর্ষণীয় হবে।
আপডেট 7/26/2013
মাত্র একটি দ্রুত আপডেট, সর্বশেষ Xamarin.Android 4.8 এর সাথে বেঞ্চমার্ক অ্যাপ্লিকেশনগুলির সাথে পুনরায় সংকলিত, এবং আজ প্রকাশিত ডট 42 1.0.1.72 আপডেটের সাথে - এর আগে প্রকাশিত ফলাফলগুলি থেকে কোনও উল্লেখযোগ্য পরিবর্তন হয়নি।
7/30/2013 আপডেট করুন - ডট 42 এর জন্য আরও ভাল ফলাফল
আমার জাভা কোডটির রবার্টের (dot42 নির্মাতাদের থেকে) সি # তে ডট 42 পুনরায় পরীক্ষা করা। আমার সি # বন্দরে প্রাথমিকভাবে জামারিনের জন্য করা, আমি কিছু স্থানীয় জাভা ক্লাস যেমন প্রতিস্থাপনের তালিকা তালিকার সাথে সি # এর সাথে তালিকাভূক্ত করেছি, রবার্টের আমার ডট 42 সোর্স কোড নেই, তাই তিনি এটি আবার জাভা থেকে পোর্ট করেছেন এবং সেখানে জাভা ক্লাস ব্যবহার করেছেন এমন জায়গাগুলি, যা ডট 42-র উপকার করে, আমি অনুমান করি কারণ এটি ডালভিক ভিএম, জাভা-র মতো, এবং জামোরিনের মতো মনো-তে নয় runs এখন ডট 42 ফলাফল আরও ভাল। আমার পরীক্ষার একটি লগ এখানে:
7/30/2013 - ডট 42 সি # তে আরও জাভা ক্লাস সহ ডট 42 পরীক্ষা
ইন্টেল এমুলেটর, অ্যান্ড্রয়েড 4.2
ডট 42, স্ট্রিংবিল্ডার ব্যবহার করে গ্রেগের কোড। রিপ্লেস () যেমন জ্যামারিনে):
গ্র্যান্ড টোটাল টাইম (5 রান): 3646 এমএস, ফাইল পঠন সহ মোট: 3830 এমএসস্ট্রিং.রোপ্লেস () জাভা এবং রবার্টের কোড হিসাবে) ব্যবহার করে গ্রেটসের কোড:
গ্র্যান্ড টোটাল টাইম (5 রান): 3027 এমএস, ফাইল পঠন সহ: 3206 এমএসডট 42, রবার্টের কোড:
গ্র্যান্ড মোট সময় (5 রান): 1781 এমএস, ফাইল পড়ার সাথে মোট: 1999 এমএসজামারিন:
গ্র্যান্ড মোট সময় (5 রান): 1373 এমএস, ফাইল পঠন মোট সহ: 1505 এমএসজাভা:
গ্র্যান্ড টোটাল টাইম (5 রান): 1844 এমএস, ফাইল পঠন মোট সহ: 2044 এমএসএআরএম, স্যামসুং গ্যালাক্সি নোট 2, পাওয়ার সাশ্রয় বন্ধ, অ্যান্ড্রয়েড 4.1.1
ডট 42, স্ট্রিংবিল্ডার ব্যবহার করে গ্রেগের কোড ep রিপ্লেস () জ্যামারিনের মতো):
গ্র্যান্ড টোটাল টাইম (5 রান): 10875 এমএস, ফাইল পঠন সহ: 11280 এমএসস্ট্রিং.রোপ্লেস () জাভা এবং রবার্টের কোড হিসাবে) ব্যবহার করে গ্রেটসের কোড:
গ্র্যান্ড টোটাল টাইম (৫ রান): ৯10১০ এমএস, ফাইল পড়ার সাথে মোট: ১০০৯7 এমএসডট 42, রবার্টের কোড:
গ্র্যান্ড মোট সময় (5 রান): 6279 এমএস, ফাইল পড়ার সাথে মোট: 6622 এমএসজামারিন:
গ্র্যান্ড মোট সময় (5 রান): 6201 এমএস, ফাইল পঠন মোট সহ: 6476 এমএসজাভা:
গ্র্যান্ড টোটাল সময় (5 রান): 7141 এমএস, ফাইল পঠন মোট সহ: 7479 এমএস
আমি এখনও মনে করি যে ডট 42 এর আরও অনেক দীর্ঘ পথ রয়েছে। জাভা-জাতীয় ক্লাস (যেমন অ্যারেলিস্ট) এবং তাদের সাথে একটি ভাল পারফরম্যান্স জাভা থেকে সি # তে পোর্টিং কোডটি আরও সহজ করে তুলবে। যাইহোক, এটি এমন কিছু যা আমি সম্ভবত খুব বেশি করতে চাই না। আমি বরং বিদ্যমান সি # কোড (লাইব্রেরি ইত্যাদি) ব্যবহার করতে চাই, যা স্থানীয় সি # ক্লাস (উদাহরণস্বরূপ তালিকা) ব্যবহার করবে এবং এটি বর্তমান ডট 42 কোডের সাথে ধীরে ধীরে সঞ্চালন করবে এবং জ্যামারিনের সাথে খুব ভাল করবে।
গ্রেগ