2009-09-18 13 views
7

संभव डुप्लिकेट:
Extension Method Performanceरनटाइम पर एक्सटेंशन विधि से क्या ओवरहेड जुड़ा हुआ है? (.NET)

एक डेटा क्रंचिंग अनुप्रयोग है कि है सीपीयू और/या स्मृति पहुँच बाध्य में, एक एक लाइन विस्तार विधि उल्लेखनीय की भूमि के ऊपर है? क्या यह सामान्य फ़ंक्शन कॉल से अधिक है, या यह केवल एक कंपाइलर/आईडीई अबास्ट्रक्शन है? उदाहरण के लिए, निम्नलिखित समारोह बीमार की सलाह दी जाती है, तो यह कई हजार बार एक दूसरे के ऊपर बुलाया जा रहा था:

public static void WriteElementString(this XmlTextWriter writer, string name, int data) 
{ 
    writer.WriteElementString(name, data.ToString()); 
} 

उत्तर

18

कोई भूमि के ऊपर नहीं है। यह सिर्फ एक स्थिर विधि है जिसे विभिन्न वाक्यविन्यास कहा जाता है। उत्पन्न आईएल सिर्फ एक सामान्य कॉल है।

दूसरे शब्दों में, अपने विस्तार विधि के लिए भूमि के ऊपर बिल्कुल के लिए

writer.WriteElementString(name, data); 

में ही है के रूप में अगर तुम सिर्फ

XmlWriterExtensions.WriteElementString(writer, name, data); 

कहा जाता है ... क्योंकि उत्पन्न आईएल बिल्कुल वैसा ही हो जाएगा ।

प्रदर्शन के संदर्भ में, "एक हजार बार कई बार" ऊपर कुछ भी नहीं है। एक अतिरिक्त स्तर का ढेर रखने के लिए उपर उस स्तर पर पूरी तरह से महत्वहीन होगा ... भले ही विधि को रेखांकित नहीं किया गया हो, जो मुझे विश्वास है कि इस मामले में यह होने की संभावना है।

हालांकि, प्रदर्शन का सामान्य नियम लागू होता है: जब तक आप माप नहीं लेते हैं, यह सब अनुमान है। या कम से कम, वास्तविक इस मामले में हिट अनुमान है; "विस्तार विधियां संकलक में वाक्य रचनात्मक चीनी के साथ सामान्य तरीके हैं" अनुमान नहीं है।

3

कोई ओवरहेड नहीं, यह सिर्फ एक वाक्य रचनात्मक चीनी है, इसका सरल कंपाइलर अमूर्तता है।

+2

सिंटेक्टिक चीनी? या यह कैसे sucralose बनाया जाता है? –

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