শব্দার্থক সত্ত্বেও, আপনি উভয় বিকল্প বিবেচনা করার সময় পারফরম্যান্স একটি গুরুত্বপূর্ণ বিবেচনা হতে পারে। পূর্বে উল্লিখিত হিসাবে, KeyValuePair
মানটি একটি মান প্রকার (কাঠামো), যেখানে এটি Tuple<>
একটি রেফারেন্স টাইপ (শ্রেণি)। অতএব, KeyValuePair
স্ট্যাকের Tuple<>
জন্য বরাদ্দ করা হয় এবং গাদাতে বরাদ্দ করা হয়, এবং সর্বোত্তম পছন্দটি সাধারণত স্ট্যাক বনাম হিপ মেমরি বরাদ্দের ক্লাসিক যুক্তি দ্বারা নির্ধারিত হয় । সংক্ষেপে, স্ট্যাক স্পেস সীমিত, তবে সাধারণত খুব দ্রুত অ্যাক্সেস থাকে। হিপ মেমরিটি অনেক বড় তবে কিছুটা ধীর।
KeyValuePair<T1, T2>
উভয় কী এবং মান ধরনের প্রিমিটিভের (মান ধরনের মত ভাল পছন্দ হতে পারে int
, bool
, double
, ইত্যাদি) বা ছোট আকারের structs মধ্যে। স্ট্যাকের আদিম ধরণের সাথে, বরাদ্দ এবং অবনতি দ্রুত বজ্রপাত হয়। এটি সত্যিই কর্মক্ষমতাকে প্রভাবিত করতে পারে, বিশেষত পুনরাবৃত্ত পদ্ধতি কলগুলির যুক্তি হিসাবে।
অন্যদিকে, Tuple<T1, T2>
সম্ভবত হয় আরও ভাল পছন্দ যদি হয় হয় T1
বা T2
হয় রেফারেন্স ধরণের (ক্লাসের মতো)। একজন KeyValuePair
সেই রেফারেন্স ধরনের পয়েন্টার রয়েছে (মূল বা মূল্য ধরনের হিসাবে) নষ্ট সাজানোর বস্তু যেহেতু উদ্দেশ্য যাহাই হউক না কেন গাদা উপর দিকে তাকিয়ে করা প্রয়োজন হবে না।
আমি অনলাইনে খুঁজে পেয়েছি এমন একটি মাপদণ্ড এখানে: টিপল বনাম, কীভেলিউপায়ার । এই বেঞ্চমার্ক সঙ্গে একমাত্র সমস্যা হল তারা পরীক্ষিত হয় KeyValuePair<string, string>
বনাম Tuple<string, string>
, এবং string
টাইপ .NET একটি অস্বাভাবিক এবং বিশেষ ধরনের মধ্যে যে এটি একটি মান টাইপ এবং / অথবা সঞ্চালনের প্রসঙ্গ উপর নির্ভর করে একটি রেফারেন্স টাইপ মত উভয় আচরণ করতে পারে। আমি বিশ্বাস করি যে এর KeyValuePair<int, int>
বিপক্ষে স্পষ্ট বিজয়ী হতেন Tuple<int, int>
। এমনকি স্বল্পতা থাকলেও ফলাফলগুলি দেখায় যে পারফরম্যান্সের পার্থক্যগুলি উল্লেখযোগ্য হতে পারে:
8.23 এনএস - টিপল
0.32 এনএস বরাদ্দ করুন - কীভ্যালু পেয়ার বরাদ্দ করুন (25x দ্রুত!)
1.93 এনএস - আর্গুমেন্ট
2.57 এনএস হিসাবে টুপল পাস - আর্গুমেন্ট হিসাবে কীভ্যালিউপায়ার পাস করুন
1.91 এনএস - রিটার্ন টুপল
6.09 এনএস - রিটার্ন কীভ্যালিউপায়ার
2.79 এনএস - তালিকা
4.18 এনএস থেকে টিপল লোড করুন - তালিকা থেকে কীভ্যালু পেয়ার লোড করুন
KeyValuePair
একটি কী এবং একটি মান, একটিTuple<T1,T2>
হ'ল সমান মানগুলির একটি জোড়া । আপনি আরও জিজ্ঞাসা করতে পারেন: "List<Class>
আমি যদি ব্যবহার করতে পারি তবে আমি কেন ব্যবহার করবDictionary<A,B>
"।