2009-11-11 10 views
5

मेरे पास तुलना करने के लिए तीन शर्त हैं। निम्नलिखित दो के बीच कौन सा तेज़ है? कृपया मुझे इंगित करें। सबको शुक्रीया!जो तेज़ है - अगर..ठीक है या चुनें..केस?

If var = 1 then 
    Command for updating database 
ElseIf var = 2 then 
    Command for updating database 
ElseIf var = 3 then 
    Command for updating database 
EndIf 

और

Select Case var 
    Case 1 
     Command for updating database 
    Case 2 
     Command for updating database 
    Case 3 
     Command for updating database 
End Select 
+8

कोई भी प्रदर्शन जो आपको मिलेगा वह दूसरे पर एक दृष्टिकोण के साथ सबसे अच्छा होगा। इस तरह की चीजों के लिए कोड ट्रम्प प्रदर्शन की पठनीयता। – JohnFx

उत्तर

12

यदि आप दो टुकड़ों को संकलित करते हैं और डिस्सेबल करने के लिए परावर्तक का उपयोग करते हैं तो आप देखेंगे कि वे दोनों व्यावहारिक रूप से एक ही आईएल के रूप में समाप्त होते हैं। संकलक if/else को case कथन के साथ बदल देता है।

यदि आपके पास प्रदर्शन समस्याएं हैं तो इस प्रकार का माइक्रो ऑप्टिमाइज़ेशन आपकी मदद करने की अत्यधिक संभावना नहीं है।

यदि आपके पास प्रदर्शन समस्याएं हैं तो आपको प्रोग्राम को प्रोफ़ाइल करने और बाधाओं के बारे में पता लगाने की आवश्यकता है।

यदि आपके पास प्रदर्शन समस्याएं नहीं हैं, तो इस सामग्री को पसीना बंद करें और आसानी से समझने वाले कोड लिखने की चिंता करें।

8

एक डेटाबेस कार्रवाई में कम से कम 1,000 बार if/else या case बयान की तुलना में धीमी हो जाएगा।

सामान्य रूप से, केस स्टेटमेंट तेजी से निष्पादित कर सकते हैं, क्योंकि कंपाइलर या रनटाइम एक कूद तालिका बना सकता है। आम तौर पर, पांच से कम वस्तुओं के लिए, एक कंपाइलर केस स्टेटमेंट को if/else कथन की सूची के रूप में लिख देगा। यदि उपरोक्त का प्रदर्शन मापनीय था, तो मुझे लगता है कि प्रदर्शन समान होगा, जैसा कि वही निर्देश निष्पादित किए जा रहे हैं।

एमएसआईएल का एक विशिष्ट OpCode for switch कथन है। किसी को यह देखने के लिए एमएसआईएल को डिकंपाइल करना होगा कि वीबी.Net तीन वस्तुओं के लिए एक जंप टेबल बनायेगा या नहीं।

10

सैद्धांतिक रूप से, switch..case तेज होना चाहिए, क्योंकि यह एक लुकअप टेबल है (जैसा कि अक्सर संकलक द्वारा कार्यान्वित किया जाता है)।

हालांकि, यदि आप चिंतित हैं कि इनमें से कौन सा तेजी से चलता है, और यह वास्तव में आपके प्रोग्राम में बाधा है, तो आपके पास एक असाधारण रूप से अच्छी तरह से व्यवहार की गई परियोजना है।

4

इस प्रकार के सवालों के जवाब देने का सबसे अच्छा तरीका निश्चित रूप से एक बेंचमार्क के साथ है।

प्रत्येक ऑपरेशन को एक लूप में रखें जो 10,000 बार निष्पादित करता है, लूप के पहले और बाद में सिस्टम समय रिकॉर्ड करें, अंत समय से प्रारंभ समय घटाएं और प्रत्येक विधि के परिणामों की तुलना करें।

संबंधित मुद्दे