2009-08-27 13 views
6

मुझे एक निश्चित हां या नहीं की उम्मीद नहीं है। आपके पास जो भी ज्ञान हो सकता है, मैं एक उत्तर के रूप में विचार करूंगा।यदि अनुकूलन सक्षम हैं तो क्या JIT हमेशा इस विधि को रेखांकित करेगा?

private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate) 
{ 
    return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C"); 
} 
+0

इस पर "हाँ" कहना मुश्किल है, लेकिन चूंकि यह निजी है, इसलिए मुझे ऐसा लगता है। –

+5

सी # कंपाइलर कभी भी * कुछ भी * इनलाइन नहीं करता है। ऑप्टिमाइज़ेशन की सूची के लिए सी # कंपाइलर - जिट कंपाइलर के बजाए - प्रदर्शन करता है, विषय पर मेरा आलेख देखें। http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx –

+0

धन्यवाद एरिक, ऐसा लगता है कि मेरे पास बहुत कुछ पढ़ना है। – ChaosPandion

उत्तर

21

इनलाइनिंग सीआईटी कंपाइलर के जेआईटी का कार्यान्वयन विवरण है। Eric Gunnerson's blog से:

JIT का उपयोग करता को heuristics की एक संख्या तय एक विधि में लाइन होना चाहिए।

  • तरीके कि आईएल के अधिक से अधिक 32 से बाइट्स inlined नहीं दी जाएगी: निम्नलिखित अधिक उन (ध्यान दें है कि इस संपूर्ण नहीं है) के महत्वपूर्ण की एक सूची है।
  • आभासी कार्यों को रेखांकित नहीं किया गया है।
  • जटिल प्रवाह नियंत्रण वाले तरीके इन-रेखांकित नहीं होंगे। कॉम्प्लेक्स प्रवाह नियंत्रण किसी भी प्रवाह नियंत्रण अन्य यदि/तो/else से अधिक है; इस मामले में, स्विच या समय।
  • अपवाद-हैंडलिंग ब्लॉक वाले तरीके इनलाइन नहीं हैं, हालांकि अपवादों को फेंकने वाली विधियां अभी भी इनलाइनिंग के लिए उम्मीदवार हैं।
  • यदि किसी भी विधि के औपचारिक तर्क structs हैं, तो विधि को रेखांकित नहीं किया जाएगा।

यद्यपि आपका विधि काफी छोटा और बहुत ही जटिल तो यह heuristics से मेल करने वाले नहीं है, Nullable<T> एक struct इसलिए मुझे लगता है कि है कि आपके द्वारा विधि inlined नहीं है।

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

मैं ध्यान से स्पष्ट रूप से इन अनुमानों के लिए कोडिंग पर विचार करेंगे, क्योंकि वे JIT के भविष्य के संस्करणों में बदल सकता है: लेकिन यह वास्तव में JIT और कुछ भी नहीं के एक कार्यान्वयन विस्तार आप के लिए कोड चाहिए। इस बात की गारंटी देने के लिए विधि की शुद्धता से समझौता न करें कि यह रेखांकित किया जाएगा।

संपादित करें: जाहिर structs inlined नहीं किया जा रहा बारे में थोड़ा बाहर की तारीख है, अद्यतन जानकारी Vance Morrison's blog पर पाई जा सकती है।

+2

संरचना विकल्प अब .NET 3.5sp1 के रूप में सत्य नहीं है। संरचना पैरामीटर अब रेखांकित किया जा सकता है। –

+0

@ रीड कॉपसी: जानकारी के लिए धन्यवाद। प्वाइंट सिद्ध :) – dtb

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

  • कोई संबंधित समस्या नहीं^_^