2009-07-27 9 views
8

.NET CLR क्रम में पता है कार्यावधि में अनुकूलन करने के लिए कैसे/इनलाइन सरल संपत्ति ही टिककर खेल? उदाहरण के लिए:क्या .NET CLR गुणों की स्वचालित रूपरेखा करता है?

property int Length { get; set; } 

इस "Length__get" समारोह (इसके लिए एक ढेर के निर्माण, कोड निष्पादित करने के लिए कूद, आदि) एक बार यह क्रम में JIT'd है क्रियान्वित हो जाएगा? या जिटर स्मार्ट है, और जानता है कि इसे कक्षा क्षेत्र के उपयोग के रूप में फिर से लिखा जा सकता है?

उत्तर

13

हाँ, CLR "सामान्य" मामलों में इनलाइन होगा। ऐसी कुछ स्थितियां हैं जिनमें इनलाइनिंग नहीं होती है, हालांकि - MarshalByRefObject से ली गई कुछ भी शामिल है (क्योंकि यह रनटाइम प्रॉक्सी हो सकती है)। 86, संस्करण आदि बनाम 64 तुच्छ गुण होने की संभावना के रूप में के रूप में आप हालांकि मिल जाएगा :)

inlined जा करने के लिए (के लिए के बारे में कर रहे हैं -

क्या inlined हो जाता है के लिए नियमों को सही CLR आप उपयोग कर रहे पर निर्भर कुछ कारणों से मैंने एक छोटी सी संपत्ति को अतीत में युगल के लिए क्षेत्र की पहुंच से धीमा कर दिया है ... देशी शब्द आकार से बड़े मानों के आसपास कुछ प्रतिबंध हो सकते हैं।)

+0

@ जोन, "मूल शब्द आकार से बड़े मूल्य" से आपका क्या मतलब था? –

+3

मैं एक 32 बिट प्रोसेसर पर एक लंबे या डबल तरह बातें (जिनमें से प्रत्येक 64 बिट्स है) मतलब है। –

+0

धन्यवाद जॉन। । –

7

.NET 2.0 में, विधियां संपत्ति गेटर्स/सेटर्स) को रेखांकित किया जाएगा यदि उनके पास 32 बाइट से कम था।

नेट 3.5 JIT'r थोड़ा अधिक बुद्धिमान है, इसलिए यह निर्भर करता है। यह certianly यह इनलाइन सकता है।

इस में से कुछ चर्चा के लिए, To Inline or not to Inline: That is the question देखते हैं।

+3

अच्छा लिंक। वेंस मॉरिसन ने विस्तार से बातचीत की है कि .NET 3.5 में क्या और क्या नहीं मिलता है। –

+1

एल 1 कैश की वजह से धीमी गति से निष्पादित अधिक कोड (इनलाइन के माध्यम से उत्पन्न) के बारे में दिलचस्प बिंदु। – Armentage

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