সিআইএল স্যুইচ নির্দেশের সাথে সি # স্যুইচ বিবৃতিটি বিভ্রান্ত না করা গুরুত্বপূর্ণ।
সিআইএল স্যুইচটি একটি জাম্প টেবিল, যার জন্য জাম্প অ্যাড্রেসগুলির একটি সেটে একটি সূচক প্রয়োজন।
এটি কেবল তখনই কার্যকর যখন সি # সুইচের কেসগুলি সংলগ্ন হয়:
case 3: blah; break;
case 4: blah; break;
case 5: blah; break;
তবে এগুলি যদি না হয় তবে অল্প ব্যবহার:
case 10: blah; break;
case 200: blah; break;
case 3000: blah; break;
(আপনার কেবলমাত্র 3 টি স্লট ব্যবহৃত আকারের একটি টেবিলের 3000 প্রবেশের দরকার হবে)
অ-সংলগ্ন অভিব্যক্তিগুলির সাথে, সংকলক লিনিয়ার সম্পাদনা শুরু করতে পারে যদি-অন্যথায়-যদি-অন্যথায় পরীক্ষা করে।
বৃহত্তর অ-সংলগ্ন এক্সপ্রেশন সেটগুলির সাথে, সংকলকটি বাইনারি ট্রি অনুসন্ধানের সাথে শুরু করতে পারে এবং শেষ পর্যন্ত যদি অন্যথায় হয় তবে অন্য কয়েকটি শেষ আইটেম।
সংলগ্ন আইটেমগুলির ক্লাম্প সমন্বিত এক্সপ্রেশন সেটগুলির সাথে, সংকলকটি বাইনারি গাছের অনুসন্ধান এবং শেষ পর্যন্ত একটি সিআইএল স্যুইচ করতে পারে।
এটি "মাইস" এবং "মাইটস" পূর্ণ, এবং এটি সংকলকটির উপর নির্ভরশীল (মনো বা রটারের সাথে পৃথক হতে পারে)।
সংলগ্ন কেসগুলি ব্যবহার করে আমি আমার মেশিনে আপনার ফলাফলগুলি প্রতিলিপি করেছি:
10 টি ওয়ে স্যুইচ কার্যকর করার জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 25.1383
আনুমানিক সময় প্রতি 10 ওয়ে স্যুইচ (এমএস): 0.00251383
50 টি ওয়ে স্যুইচটি চালানোর জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 26.593
আনুমানিক সময় প্রতি 50 ওয়ে স্যুইচ (এমএস): 0.0026593
5000 ওয়ে স্যুইচটি চালানোর জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 23.7094
আনুমানিক সময় প্রতি 5000 ওয়ে স্যুইচ (এমএস): 0.00237094
50000 ওয়ে স্যুইচটি চালানোর জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 20.0933
আনুমানিক সময় প্রতি 50000 ওয়ে স্যুইচ (এমএস): 0.00200933
তারপরে আমি অ-সংলগ্ন কেস এক্সপ্রেশনগুলিও ব্যবহার করেছি:
10 টি ওয়ে স্যুইচটি চালানোর জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 19.6189
প্রতি 10 ওয়ে স্যুইচ (এমএস) প্রতি আনুমানিক সময়: 0.00196189
500 ওয়ে স্যুইচ কার্যকর করার জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 19.1664
আনুমানিক সময় প্রতি 500 ওয়ে স্যুইচ (এমএস): 0.00191664
5000 ওয়ে স্যুইচটি চালানোর জন্য মোট সময়, 10000 পুনরাবৃত্তি (এমএস): 19.5871
আনুমানিক সময় প্রতি 5000 ওয়ে সুইচ (এমএস): 0.00195871
একটি সংলগ্ন 50,000 কেস সুইচ বিবৃতি সংকলন করবে না।
"'কনসোল অ্যাপ্লিকেশন 1. প্রোগ্রাম.মেন (স্ট্রিং [])' এর নিকটে সংকলনের জন্য একটি এক্সপ্রেশন খুব দীর্ঘ বা জটিল '
এখানে মজার বিষয় হ'ল বাইনারি ট্রি অনুসন্ধানটি সিআইএল স্যুইচ নির্দেশের চেয়ে দ্রুত (সম্ভবত পরিসংখ্যানগতভাবে নয়) প্রদর্শিত হয়।
ব্রায়ান, আপনি " ধ্রুবক " শব্দটি ব্যবহার করেছেন, যা একটি গণনামূলক জটিলতার তত্ত্বের দৃষ্টিকোণ থেকে খুব নির্দিষ্ট অর্থ। সরল সংলগ্ন পূর্ণসংখ্যার উদাহরণটি সিআইএল উত্পাদন করতে পারে যা ও (1) (ধ্রুবক) হিসাবে বিবেচিত হয়, একটি বিচ্ছুরণ উদাহরণ হ'ল (লগ এন) (লোগারিথমিক), গুচ্ছ উদাহরণগুলি কোথাও কোথাও থাকে এবং ছোট উদাহরণগুলি ও (এন) (লিনিয়ার) হয় )।
এটি স্ট্রিং পরিস্থিতিকেও সম্বোধন করে না, যেখানে একটি স্ট্যাটিক Generic.Dictionary<string,int32>
তৈরি হতে পারে এবং প্রথম ব্যবহারে নির্দিষ্ট ওভারহেড ভোগে। এখানে পারফরম্যান্স এর পারফরম্যান্স উপর নির্ভর করবেGeneric.Dictionary
।
আপনি যদি সি # ল্যাঙ্গুয়েজ স্পেসিফিকেশন পরীক্ষা করেন (সিআইএল স্পেক নয়) আপনি দেখতে পাবেন "15.7.2" স্যুইচ স্টেটমেন্ট "" ধ্রুবক সময় "সম্পর্কে কোনও উল্লেখ করে না বা অন্তর্নিহিত বাস্তবায়ন এমনকি সিআইএল স্যুইচ নির্দেশিকা ব্যবহার করে (ধরে নিতে খুব সতর্কতা অবলম্বন করুন) এই ধরনের জিনিস).
দিনের শেষে, একটি আধুনিক সিস্টেমে পূর্ণসংখ্যার এক্সপ্রেশনের বিপরীতে সি # স্যুইচ হ'ল একটি সাব-মাইক্রোসেকেন্ড অপারেশন, এবং সাধারণত উদ্বিগ্ন হওয়ার মতো নয়।
অবশ্যই এই সময়গুলি মেশিন এবং শর্তের উপর নির্ভর করবে। আমি এই সময় সংক্রান্ত পরীক্ষাগুলির দিকে মনোযোগ দেব না, আমরা যে মাইক্রোসেকেন্ডের সময়কালের কথা বলছি তা যে কোনও "আসল" কোড চালিত হওয়ার দ্বারা দ্বিখণ্ডিত হয় (এবং আপনাকে অবশ্যই কিছু "রিয়েল কোড" অন্তর্ভুক্ত করতে হবে অন্যথায় সংকলকটি শাখাটি অপ্টিমাইজ করবে), বা সিস্টেমে জিটার। আমার উত্তরগুলি IL DASM ব্যবহারের উপর ভিত্তি করে সি # সংকলক দ্বারা নির্মিত সিআইএল পরীক্ষা করতে । অবশ্যই এটি চূড়ান্ত নয়, সিপিইউ পরিচালিত প্রকৃত নির্দেশনাগুলি তখন জেআইটি তৈরি করে।
আমি আমার x86 মেশিনে প্রকৃতরূপে নির্ধারিত চূড়ান্ত সিপিইউ নির্দেশাবলী পরীক্ষা করেছি এবং একটি সাধারণ সংলগ্ন সেট সুইচটি এরকম কিছু করে নিশ্চিত করতে পারি:
jmp ds:300025F0[eax*4]
যেখানে একটি বাইনারি ট্রি অনুসন্ধান পূর্ণ:
cmp ebx, 79Eh
jg 3000352B
cmp ebx, 654h
jg 300032BB
…
cmp ebx, 0F82h
jz 30005EEE