TargetedPatchingOptOut: "NGN छवि सीमाओं के पार प्रदर्शन महत्वपूर्ण इनलाइन"?


140

परावर्तक का उपयोग करके कुछ फ्रेमवर्क कक्षाओं के माध्यम से जा रहे हैं और कई तरीकों और गुणों पर ध्यान दिया गया है जिसमें निम्नलिखित विशेषता है

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]

मुझे पूरा यकीन है कि मैंने उपरोक्त टिप्पणी भी कहीं और देखी है और कभी भी इसका पालन नहीं किया है।

क्या कोई मुझे बता सकता है कि C # और किसी अन्य संदर्भ में इसका क्या मतलब है?

जवाबों:


176

यह एनजीएन को बताता है कि यह एक अलग विधानसभा में भी लागू की गई विधि को इनलाइन करना ठीक है।

उदाहरण के लिए:

  • String.Equals है [TargetedPatchingOptOut]
  • आप एक प्रोग्राम लिखते हैं जो कॉल करता है String.Equals
  • आप अधिकतम प्रदर्शन के लिए इस कार्यक्रम पर एनजीएन चलाते हैं
  • एनजीएन String.Equalsकॉल को इनलाइन करेगा , विधि में वास्तविक कोड के साथ विधि कॉल निर्देश की जगह लेगा।
    विधि कॉल महंगे (थोड़े) महंगे हैं, इसलिए यह बार-बार के तरीकों के लिए एक प्रदर्शन को बढ़ावा देने वाला है।

हालाँकि, यदि Microsoft को एक सुरक्षा छेद मिलता है, तो String.Equalsवे सिर्फ अपडेट नहीं कर सकते mscorlib.dll, क्योंकि यह असेंबली को प्रभावित नहीं करेगा कि आप सिर्फ NGen'd। (चूंकि इसमें बिना संदर्भ के कच्चा मशीन कोड है String.Equals)।
मुझे लगता है कि अगर वास्तव में ऐसा होता है, तो सुरक्षा अद्यतन एनजीएन स्टोर को साफ कर देगा।

ध्यान दें कि यह विशेषता केवल .NET फ्रेमवर्क असेंबली में उपयोगी है। आप इसे अपने आप में जरूरत नहीं है। आप इसके बारे में अधिक जानकारी यहाँ से प्राप्त कर सकते हैं: https://stackoverflow.com/a/14982340/631802


18
क्या हम इस विशेषता का उपयोग अपने ढांचे में कर सकते हैं? मेरे ओपन सोर्स लाइब्रेरी में बहुत सारे गणित कार्य हैं जो इससे लाभान्वित होंगे ...
मैटवेवी

3
यदि .NET फ्रेमवर्क को पैच किया जाता है, तो मौजूदा देशी छवि फ़ाइलों को अमान्य और पुनर्निर्मित किया गया है (कम से कम यह मेरी समझ है)
Motti

14
@MattDavey नहीं, आपको अपने कोड में इस विशेषता का उपयोग नहीं करना चाहिए। जैसा कि MSDN में लिखा गया है : "यह एपीआई .NET फ्रेमवर्क इन्फ्रास्ट्रक्चर का समर्थन करता है और इसका इरादा सीधे आपके कोड से उपयोग करने का नहीं है।" यह विशेषता केवल उन असेंबली को प्रभावित करती है जो लक्षित पैचिंग का उपयोग करती हैं। कुछ स्रोत लिंक के साथ एक लंबा स्पष्टीकरण यहाँ पाया जा सकता है: stackoverflow.com/a/14982340/631802
अंतिम संस्कार

25
तथ्य यह है कि हमारे सभी कोड स्वचालित रूप से असेंबली सीमा के पार हो सकते हैं, जिसका अर्थ है कि यह विशेषता हमारे लिए पूरी तरह से बेकार है, वास्तव में जवाब में उल्लेख करने की आवश्यकता है ...
ब्लूराजा - डैनी पफ्लुगुएफ्ट

4
@MattDavey यदि आप संकलक को एक कुहनी देना चाहते हैं कि आपके तरीकों को यदि संभव हो तो इनलाइन किया जाना चाहिए, तो उपयोग करें[MethodImpl(MethodImplOptions.AggressiveInlining)]
बेसिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.