আমি একজন সি ++ এবং একটি সি # বিকাশকারী। .NET ফ্রেমওয়ার্কের প্রথম বিটা থেকে আমি সি # অ্যাপ্লিকেশনগুলি বিকাশ করেছি এবং আমার সি ++ অ্যাপ্লিকেশনগুলি বিকাশে 20 বছরেরও বেশি অভিজ্ঞতা অর্জন করেছি। প্রথমত, সি # কোডটি সি ++ অ্যাপ্লিকেশনটির চেয়ে দ্রুততর হবে না তবে আমি পরিচালিত কোড, এটি কীভাবে কাজ করে, আন্তঃ অপ-স্তর স্তর, মেমরি পরিচালন ইন্টার্নালস, গতিশীল টাইপ সিস্টেম এবং আবর্জনা সংগ্রহকারী সম্পর্কে দীর্ঘ আলোচনা করতে যাব না। তবুও, আমাকে এখানে তালিকাভুক্ত মানদণ্ডগুলি বলে সমস্তগুলি প্রকৃত ফলাফল দেয় continue
আমাকে বোঝাতে দাও: সি # (। নেট ফ্রেমওয়ার্ক 4) এর জন্য জেআইটি সংকলকটি আমাদের প্রথমে বিবেচনা করা উচিত। এখন জেআইটি সিপিইউর জন্য বিভিন্ন অপ্টিমাইজেশন অ্যালগরিদম ব্যবহার করে (যা ডিফল্ট সি ++ অপ্টিমাইজার যা ভিজ্যুয়াল স্টুডিও সহ আসে তার চেয়ে বেশি আক্রমণাত্মক হয়ে থাকে) এবং নেট নেট জাইটি সংকলক দ্বারা ব্যবহৃত নির্দেশ সেটটি ব্যবহার করে সিপিইউর জন্য স্থানীয় কোড তৈরি করে প্রকৃত সিপিইউয়ের একটি নিবিড় প্রতিচ্ছবি মেশিনে তাই মেশিন কোডের নির্দিষ্ট বিকল্পগুলি ক্লক চক্র হ্রাস করতে এবং সিপিইউ পাইপলাইন ক্যাশে হিট রেট উন্নত করতে পারে এবং আরও হাইপার-থ্রেডিং অপ্টিমাইজেশন যেমন আমাদের নির্দেশ পুনর্নির্মাণ এবং শাখার পূর্বাভাস সম্পর্কিত উন্নতি তৈরি করতে পারে।
এর অর্থ হ'ল আপনি যদি রিলিজ বিল্ড (ডিইবিইউজি বিল্ড নয়) এর জন্য সঠিক প্যারামিটার ব্যবহার করে আপনার সি ++ অ্যাপ্লিকেশনটি সংকলন না করেন তবে আপনার সি ++ অ্যাপ্লিকেশন সংশ্লিষ্ট সি # বা .নেট ভিত্তিক অ্যাপ্লিকেশনটির চেয়ে আরও ধীরে ধীরে পারফর্ম করতে পারে। আপনার সি ++ অ্যাপ্লিকেশনটিতে প্রজেক্টের বৈশিষ্ট্য নির্দিষ্ট করার সময়, আপনি "সম্পূর্ণ অপ্টিমাইজেশন" এবং "ফাস্ট কোডের পক্ষে" সক্ষম করেছেন তা নিশ্চিত করুন। আপনার যদি একটি bit৪ বিট মেশিন থাকে তবে আপনার অবশ্যই লক্ষ্য প্ল্যাটফর্ম হিসাবে x64 উত্পন্ন করার জন্য নির্দিষ্ট করতে হবে, অন্যথায় আপনার কোডটি রূপান্তর উপ-স্তর (WW64) এর মাধ্যমে কার্যকর করা হবে যা কার্যকারিতা হ্রাস করবে which
আপনি একবার সংকলকটিতে সঠিক অপ্টিমাইজেশানগুলি সম্পাদন করলে, আমি সি ++ অ্যাপ্লিকেশনটির জন্য .72 সেকেন্ড এবং সি # অ্যাপ্লিকেশনটির জন্য 1.16 সেকেন্ড (রিলিজ বিল্ডে উভয়ই) পাই। যেহেতু সি # অ্যাপ্লিকেশনটি খুব বেসিক এবং স্ট্যাকের লুপে ব্যবহৃত মেমরিটি বরাদ্দ করে এবং হিপগুলিতে নয়, এটি বস্তুগুলির সাথে জড়িত একটি বাস্তব অ্যাপ্লিকেশন, ভারী গণনা এবং বৃহত্তর ডেটা-সেটগুলির তুলনায় অনেক ভাল সম্পাদন করছে। সুতরাং প্রদত্ত পরিসংখ্যানগুলি সি # এবং .NET কাঠামোর দিকে পক্ষপাতযুক্ত আশাবাদী পরিসংখ্যান। এমনকি এই পক্ষপাতদুষ্টতা সহ, সি ++ অ্যাপ্লিকেশন সমতুল্য সি # অ্যাপ্লিকেশনটির চেয়ে অর্ধেক সময়ের মধ্যে সম্পূর্ণ হয়। মনে রাখবেন যে মাইক্রোসফ্ট সি ++ সংকলকটি আমি ব্যবহার করেছি তার সঠিক পাইপলাইন এবং হাইপারথ্রেডিং অপটিমাইজেশন নেই (সমাবেশের নির্দেশাবলী দেখার জন্য WinDBG ব্যবহার করে)।
এখন আমরা যদি ইন্টেল সংকলক ব্যবহার করি (যা এমডি / ইনটেল প্রসেসরের উচ্চ পারফরম্যান্স অ্যাপ্লিকেশন তৈরির জন্য একটি শিল্প গোপন), একই কোডটি সি ++ এক্সিকিউটেবল বনাম .72 সেকেন্ডের জন্য মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও 2010 ব্যবহার করে .54 সেকেন্ডে কার্যকর করে । সুতরাং শেষ অবধি, চূড়ান্ত ফলাফলগুলি সি ++ এর জন্য .54 সেকেন্ড এবং সি # এর জন্য 1.16 সেকেন্ড। সুতরাং। নেট জেআইটি সংকলক দ্বারা উত্পাদিত কোডটি সি ++ এক্সিকিউটেবলের চেয়ে 214% গুণ বেশি সময় নেয়। .৪৪ সেকেন্ডে ব্যয় করা বেশিরভাগ সময় ছিল সিস্টেম থেকে সময় পাওয়ার ক্ষেত্রে এবং লুপের মধ্যেই ছিল না!
পরিসংখ্যানগুলিতে যা অনুপস্থিত তা হ'ল সূচনাকালীন এবং ক্লিনআপ সময় যা সময় অনুসারে অন্তর্ভুক্ত থাকে না। সি # অ্যাপ্লিকেশনগুলিতে সি ++ অ্যাপ্লিকেশনগুলির চেয়ে স্টার্ট আপ এবং সমাপ্তিতে অনেক বেশি সময় ব্যয় করে to এর পেছনের কারণটি জটিল এবং মেটাল মেমরি বরাদ্দ এবং আবর্জনা অপ্টিমাইজ করার জন্য প্রোগ্রামের শুরুতে (এবং ফলস্বরূপ, শেষে) প্রচুর কাজ করে যা .NET রানটাইম কোড যাচাইকরণ রুটিন এবং মেমরি ম্যানেজমেন্ট সাবসিস্টেমের সাথে করতে হয় behind সংগ্রাহক
সি ++ এবং। নেট আইএল এর কর্মক্ষমতা পরিমাপ করার সময়, সমস্ত গণনা আছে কিনা তা নিশ্চিত করার জন্য অ্যাসেম্বলি কোডটি লক্ষ্য করা গুরুত্বপূর্ণ। যা আমি পেয়েছি তা হল সি # তে কিছু অতিরিক্ত কোড না রেখে উপরের উদাহরণগুলিতে বেশিরভাগ কোড আসলে বাইনারি থেকে সরানো হয়েছিল। আপনি যখন আরও বেশি আক্রমণাত্মক অপটিমাইজার ব্যবহার করেছিলেন যেমন ইন্টেল সি ++ সংকলকটি আসে তখন এটি সি ++ এর ক্ষেত্রেও হয়েছিল। আমি উপরে প্রদত্ত ফলাফলগুলি 100% সঠিক এবং বিধানসভা স্তরে বৈধ।
ইন্টারনেটে প্রচুর ফোরামের মূল সমস্যাটি যে নবাগত অনেক লোক প্রযুক্তি বুঝতে না পেরে মাইক্রোসফ্ট বিপণনের প্রচার শুনে এবং মিথ্যা দাবি করে যে সি # সি ++ এর চেয়ে দ্রুত। দাবিটি হ'ল তাত্ত্বিকভাবে, সি # সি ++ এর চেয়ে দ্রুততর কারণ জেআইটি সংকলক সিপিইউর জন্য কোডটি অনুকূলিত করতে পারে। এই তত্ত্বের সাথে সমস্যাটি হ'ল .NET ফ্রেমওয়ার্কে প্রচুর নদীর গভীরতানির্ণয় রয়েছে যা কার্য সম্পাদনকে ধীর করে দেয়; নদীর গভীরতানির্ণয় যা সি ++ অ্যাপ্লিকেশনটিতে বিদ্যমান নেই। তদুপরি, একজন অভিজ্ঞ বিকাশকারী প্রদত্ত প্ল্যাটফর্মটির জন্য সঠিক সংকলকটি জানতে পারবেন এবং অ্যাপ্লিকেশনটি সংকলন করার সময় উপযুক্ত পতাকা ব্যবহার করবেন। লিনাক্স বা ওপেন সোর্স প্ল্যাটফর্মগুলিতে, এটি কোনও সমস্যা নয় কারণ আপনি আপনার উত্সটি বিতরণ করতে পারেন এবং যথাযথ অপ্টিমাইজেশন ব্যবহার করে কোডটি সংকলনকারী ইনস্টলেশন স্ক্রিপ্ট তৈরি করতে পারেন। উইন্ডোজ বা বদ্ধ উত্স প্ল্যাটফর্মে আপনাকে একাধিক এক্সিকিউটেবল বিতরণ করতে হবে, প্রতিটি নির্দিষ্ট অপ্টিমাইজেশন সহ। স্থাপন করা হবে উইন্ডোজ বাইনারিগুলি এমএসআই ইনস্টলার দ্বারা সনাক্ত করা সিপিইউয়ের উপর ভিত্তি করে (কাস্টম ক্রিয়া ব্যবহার করে)।