यह बल्कि इस बात पर निर्भर करता है कि कोड क्या हैं और कितने हैं। अच्छे कंपाइलर्स में स्विच कथन को अनुकूलित करने के लिए उपयोग की जाने वाली विभिन्न चालें होती हैं, जिनमें से कुछ सीधे/यदि कथन के साथ काम नहीं करेंगे। अधिकांश उदाहरण के लिए 0, 1, 2 या केस 3, 6, 9 के लिए सरल गणित करने के लिए पर्याप्त उज्ज्वल हैं या लुकअप/जंप टेबल का उपयोग करते हैं।
बेशक कुछ नहीं करते हैं, और कई आसानी से मूल्यों के असामान्य या अनियमित सेटों द्वारा फॉइल किए जाते हैं। इसके अलावा यदि कई मामलों को संभालने के लिए कोड उल्लेखनीय रूप से समान दिखता है, तो कट और पेस्ट रखरखाव के मुद्दों का कारण बन सकता है।आप कई कोड है, लेकिन वे समूहों में एल्गोरिदम रूप से विभाजित किया जा सकता है, तो आप के बजाय उदाहरण के लिए कई/नेस्ट स्विच बयान पर विचार हो सकता,:
switch (code) {
case 0x0001: ...
case 0x0002: ...
...
case 0x8001: ...
case 0x8002: ...
...
}
आप उपयोग कर सकते हैं:
if (code & 0x8000) {
code &= ~0x8000;
switch (code) {
case 0x0001: ... // actually 0x8001
case 0x0002: ... // actually 0x8002
...
}
}
else {
switch (code) {
case 0x0001: ...
case 0x0002: ...
...
}
}
कई भाषा अनुवादक को डिकोड इस तरह से opcodes, चूंकि एक बाइट ऑपोड में विभिन्न बिट्स में पैक की गई अतिरिक्त जानकारी हो सकती है, और सभी संभावित संयोजनों को ट्रांसक्रिप्ट करना और उनके हैंडलर दोहराए जाने वाले और नाजुक होंगे। दूसरी तरफ, अत्यधिक बिट मैंगलिंग कंपाइलर द्वारा किसी भी अनुकूलन को हराने और काउंटर-उत्पादक बन सकता है।
जब तक आप सुनिश्चित न हों कि यह एक वास्तविक प्रदर्शन बाधा है, तो मैं समयपूर्व अनुकूलन से बचूंगा: ऐसा करने के लिए जो भी आपको उचित रूप से मजबूत और कार्यान्वित करने के लिए त्वरित रूप से हमला करता है। जैसे ही आपका एप्लिकेशन बहुत धीरे-धीरे चल रहा है, प्रोफाइल करें और तदनुसार अनुकूलित करें।
स्रोत
2010-03-17 21:16:34
'मूल्य = 5 * (कोड + 1);' – kennytm
@ केनीटीएम - उत्कृष्ट। सिवाय इसके कि वास्तविक मूल्य नहीं हैं ... – Rachel
+1 एक दिलचस्प प्रश्न के लिए। –