Tuesday 15 September 2015

c# - How much does the order of case labels affect the efficiency of switch statements? -


विचार करें:

  यदि (condition1) {// कोड ब्लॉक 1} और {/ / कोड ब्लॉक 2}  

अगर मुझे पता है कि condition1 हो जाएगा तो true अधिकतर समय, तो मुझे तर्क का कोड चाहिए के रूप में लिखित, के बजाय:

  अगर (! Condition1) {// कोड ब्लॉक 2} और {// कोड ब्लॉक 1}  

के बाद से मैं दूसरे कोड ब्लॉक में jump के जुर्माना से बचें (नोट: मेरे पास विधानसभा भाषा का सीमित ज्ञान है) क्या यह विचार स्विच स्टेटमेंट्स और केस लेबल्स के आगे ले जाता है?

  स्विच (myCaseValue) {case मामले 1: // कोड ब्लॉक 1 ब्रेक ; मामले Case2: // कोड ब्लॉक 2 ब्रेक; // आदि}  

अगर मुझे पता है कि एक मामले अधिक बार हो जाएगा, तो मैं मामले लेबल्स के आदेश को पुनर्व्यवस्थित कर सकता हूं ताकि यह अधिक कुशल हो ? क्या मैं? मेरे कोड में मैं केस लेबल्स को वर्णानुक्रम में कोड पठनीयता के लिए आदेश दे रहा था, इसके बिना वास्तव में इसके बारे में सोच रहा था। क्या यह माइक्रो-ऑप्टिमाइज़ेशन है?

"post-text" itemprop = "text">

आधुनिक हार्डवेयर के लिए कुछ तथ्य जैसे x86 या x86_64:

< उल>
  • एक बिना शर्त से ली गई शाखा में लगभग कोई अतिरिक्त लागत नहीं है, डिकोडिंग के अलावा यदि आप एक संख्या चाहते हैं, तो यह एक चौथाई घड़ी चक्र के बारे में है।
  • एक सशर्त शाखा, जिसे सही ढंग से अनुमान लगाया गया था, में लगभग कोई अतिरिक्त लागत नहीं है।
  • एक सशर्त शाखा, जो सही नहीं थी भविष्यवाणी के अनुसार, एक प्रोसेसर पाइपलाइन की लंबाई के बराबर दंड है, हार्डवेयर के आधार पर यह लगभग 12-20 घड़ियों है।
  • भविष्यवाणी तंत्र बहुत परिष्कृत हैं कम संख्या में पुनरावृत्तियों के साथ लूप्स (उदाहरण के लिए 2 से ऊपर कोर 2 पर) पूरी तरह से भविष्यवाणी की जा सकती है।
  • आप Agner में शाखा भविष्यवाणी के बारे में और अधिक पढ़ सकते हैं, यदि वे बहुत लंबे समय तक नहीं हैं, तो "दोबारा उठाए गए नोट-लेड" जैसे छोटे दोहराए जाने वाले पैटर्न का अनुमान लगाया जा सकता है। डोंगी उत्कृष्ट

    स्विच स्टेटमेंट आमतौर पर कंपाइलर द्वारा एक कूद तालिका द्वारा प्रतिस्थापित किया जाता है ज्यादातर मामलों में मामलों के क्रम में कोई फर्क नहीं पड़ेगा। यहां पर अप्रत्यक्ष छलांग के लिए भविष्यवाणी तंत्र भी हैं।

    तो सवाल यह नहीं है कि अगर आपके कूदने की अधिक संभावना है, तो यह कम से कम आपके द्वारा चलने वाले हार्डवेयर के लिए अनुमान लगाए जाने की संभावना है पर आपका कोड यह बिल्कुल आसान प्रश्न नहीं है। लेकिन यदि आपके पास एक यादृच्छिक (या छद्म यादृच्छिक) स्थिति के आधार पर शाखाएं हैं, तो संभव है कि आप इसे एक बंटाहीन कथन के रूप में बदलने की कोशिश कर सकें।


    1 comment: