2011-07-18 13 views
5

सी # 4 में, beforefieldinit ध्वज के बिना प्रकारों का व्यवहार बदल दिया गया था, इसलिए अब एक प्रकार का प्रारंभकर्ता कक्षा के किसी भी स्थिर क्षेत्र के पहले उपयोग से पहले कॉल कर सकता है।.NET 4 में FirstFieldInit व्यवहार क्यों बदल गया?

मेरे प्रश्न हैं क्यों सी #/.NET टीम ने उस व्यवहार को बदल दिया है? मुख्य कारण क्या है? क्या आप कोई व्यावहारिक उदाहरण दिखा सकते हैं जहां यह परिवर्तन कोई समझ में आता है?

+0

संदर्भ? आपने यह कहां पढ़ा? – leppie

+1

मैंने इसे यहां पढ़ा: [लिंक] (http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx) और मेरे विरोध में मुख्य कारण विस्तार विधियों का perfomance है? तुम क्या सोचते हो? –

+1

अप्रासंगिक। इन चीजों को किसी कारण से अनियंत्रित किया गया है। –

उत्तर

11

व्यवहार हमेशा क्या प्रलेखित है की सीमा के भीतर किया गया है - यह सिर्फ है कि यह नेट में आलसी करने के लिए उत्सुक किया जा रहा से बदल 4.

मैं संदिग्ध JIT टीम के लिए एक रास्ता खोज करने में कामयाब प्रदर्शन प्रदर्शन के बिना इसे आलसी बनाओ ... या संभवतः यह कहीं और प्रदर्शन में मदद करता है। यह केवल एक .NET 4 CLR बनाम .NET 2 CLR के व्यवहार में इस तरह के परिवर्तन की संभावना है ... ऐसा होता है कि मैंने इसे देखा, लेकिन मुझे संदेह है कि कई अन्य लोगों ने किया था। मुझे लगता है कि जेआईटी टीम के लिए दस्तावेज़ों की गारंटी के भीतर फिट बैठकर चीजों को समायोजित करना पूरी तरह से उचित है।

आखिरकार, यदि यह आपका कोड विफल हो जाता है, तो आपको पहले से ही एक बग मिला है।

+0

आपके उत्तर के लिए धन्यवाद! क्या आप जानते हैं कि जेआईटी कंपाइलर कॉल टाइप प्रारंभकर्ता कैसे हैं? यह एक प्रकार के प्रारंभिक दो बार कॉल के साथ एक विधि संकलित करता है या नहीं? मैं मानता हूं कि पहली बार कॉल करने से पहले मुझे निष्पादन के दौरान एक परफॉर्मेंस की कमी होती है, लेकिन तरीकों की दूसरी कॉल में सामान्य परफॉर्मेंस होता है। –

+0

@ स्मेलिया: मैं ईमानदार होने के बारे में नहीं जानता। मैं उम्मीद करता हूं कि कुछ प्रकार के थंकिंग चल रहे हैं, लेकिन मैंने हमेशा जेआईटी टीम को ब्योरा छोड़ा है :) –

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