2008-10-29 16 views
6

जहां तक ​​मुझे पता है कि सी # कंपाइलर को किसी विशेष फ़ंक्शन को इनलाइन करने के लिए संकेत देने का कोई तरीका नहीं है और मुझे लगता है कि यह डिज़ाइन द्वारा ऐसा ही है।क्या सी # में फ़ंक्शन इनलाइनिंग को लागू करने का कोई तरीका है?

मुझे यह भी लगता है कि प्रोग्रामर को यह निर्दिष्ट करने की अनुमति नहीं देना चाहिए कि क्या इनलाइन करना है और आम तौर पर एक अच्छा विचार नहीं है, क्योंकि इसका मतलब यह होगा कि आपको लगता है कि आप जेआईटी कंपाइलर से अधिक स्मार्ट हैं (वास्तव में उन लोगों के प्रति मेरा सम्मान) , लेकिन, अगर मैं यह निर्दिष्ट करना चाहता हूं कि किसी भी कीमत पर कोड का एक महत्वपूर्ण हिस्सा बेहद तेज़ होना चाहिए, इससे कोई फर्क नहीं पड़ता कि लक्ष्य मशीन पर इसे कैसे प्राप्त किया जाए? अभी तक आप ऐसी चीज नहीं कर सकते हैं और मुझे आश्चर्य है कि सी # भाषा और जेआईटी दोनों कभी भी इस सुविधा का समर्थन करेंगे।

मेरे मामले में, मुझे पता है कि लक्ष्य मशीन क्या है, और मुझे पता है कि फ़ंक्शन इनलाइनिंग प्रदर्शन को बेहतर बनाने में मदद करेगी। यह मुझे सोचता है कि फ़ंक्शन इनलाइनिंग को लागू करने का एकमात्र तरीका यह जानना है कि जेआईटी क्या करेगी, लेकिन मुझे नहीं लगता कि यह एक अच्छा विचार है,

इस विषय पर कोई भी प्रकाश बहुत सराहना की जाएगी।

धन्यवाद।

उत्तर

4

स्थिति 4.5 के आगमन के साथ थोड़ा बदल गया है।

अब आप विशेषता [MethodImplAttribute(MethodImplOptions.AggressiveInlining)] के साथ एक विधि को सजाने के लिए कर सकते हैं जो इसे संभवतः जेआईटी द्वारा रेखांकित किया जाएगा।

अधिक जानकारी के लिए this blog देखें।

10

लघु जवाब: नहीं

लांग जवाब: इनलाइन किए जाने वाले http://blogs.msdn.com/ericgu/archive/2004/01/29/64644.aspx

मानदंड: http://blogs.msdn.com/davidnotario/archive/2004/11/01/250398.aspx और http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

ध्यान दें कि इनलाइन किए जाने वाले मापदंड के बारे में पिछले दो कड़ियों में, नहीं structs inlines होने के बारे में एक दिनांक के बाहर; अद्यतन जानकारी पाया जा सकता है पर:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg (उच्च बदतर है)

आपको बता सकता है के रूप में, CLR और JVM दोनों आप से विधि इनलाइनिंग में ज्यादा बेहतर कर रहे हैं: http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in-version-v3-5-sp1.aspx

4

मैं हाल ही में इस बेंचमार्क कभी होगा

3
if(performance < ACCEPTABLE){ 
    if(profiler.showsAffectOfMethodCallOverhead() && seriouslyWeDoubleChecked()){ 
     if(runtimeContext.isReallyStableAndNotProneToChange() && weNeedToGetThisThingBatOutOfHellFast()){ 
      return thisIsOneOfTheFewTimesWhenANativeExternalFunctionMayBeWorthIt(); 
     } 
    } 
} 
return dontWorryAboutIt(); 

आप को क्रियान्वित कर रहे हैं कि दुर्लभ पथ, अपने सी या एएसएम बाहर तोड़।

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