2010-06-02 21 views
8

मैंने अज्ञात प्रतिनिधियों का उपयोग सी # में बहुत कुछ करना शुरू कर दिया है और मैंने आश्चर्यचकित होना शुरू कर दिया है कि वास्तव में चलाने वाले कोड से उन्हें हटाने में कितना कुशल या रनटाइम है और मैंने इसे कहीं भी विस्तृत नहीं देखा है ?सी # प्रतिनिधि संकलक अनुकूलन

क्या यह इनलाइनों को कम करने के लिए पर्याप्त चालाक है और आवर्ती उपयोगों को संक्षिप्त करने के लिए पर्याप्त रूप से पर्याप्त है?

+3

आप एक मामला है कि आप इसे अनुकूलित करना चाहते हैं का एक उदाहरण दे सकते हैं? – SLaks

+1

मुझे शक है कि * संकलक * उन्हें हटाने के लिए कुछ भी नहीं करता है। हालांकि, जेआईटीर विभिन्न अनुकूलन कर सकता है, जिसमें ऐसे कार्यों को रेखांकित करना शामिल हो सकता है। – LBushkin

+0

हालांकि, मेरा मानना ​​है कि जेआईटीई प्रतिनिधियों को रेखांकित नहीं करेगा। – SLaks

उत्तर

3

कोई सी # कंपाइलर इनलाइन कोड में लैम्ब्डा अभिव्यक्ति को अनुकूलित नहीं करेगा। बेनामी प्रतिनिधि और लैम्ब्डा अभिव्यक्ति हमेशा एक संबंधित प्रतिनिधि या अभिव्यक्ति वृक्ष का उत्पादन करेंगे। यह सी # भाषा कल्पना

एक अनाम-विधि-अभिव्यक्ति या लैम्ब्डा अभिव्यक्ति एक गुमनाम समारोह (§7.14) के रूप में वर्गीकृत किया जाता है की धारा 6.5 में शामिल है। अभिव्यक्ति में एक प्रकार नहीं है लेकिन इसे एक संगत प्रतिनिधि प्रकार या अभिव्यक्ति वृक्ष प्रकार

कुछ मामलों में लैम्बडा को कैश किया जाएगा और भविष्य के उपयोग के लिए पुनर्निर्मित नहीं किया जा सकता है। लेकिन यह रेखांकित नहीं किया जाएगा।

+0

लेकिन जो आपने उद्धृत किया है वह वास्तव में ऐसा नहीं करता है - जैसा कि मुझे लगता है कि उन्हें उपयोगकर्ताओं के दृष्टिकोण से व्यवहार करना चाहिए - क्या नहीं अनुकूलक अपनी पीठ? – iam

+0

@wb पीछे करने में सक्षम हो सकता है, यह सीधे इस राज्य नहीं है, लेकिन यह यह आवश्यक हैं। एक गुमनाम समारोह एक प्रतिनिधि परिवर्तित किया जाना चाहिए इस्तेमाल किया जा करने के लिए। डेलीगेट के overridenn जा सकती है, नेट में प्रथम श्रेणी के प्रकार के कर रहे हैं और आह्वान पर कुछ भी करने को। सी # संकलक एक प्रतिनिधि यह संभवतः एक उपयोगकर्ता परिभाषित DynamicInvokeImpl जो व्यवहार इसलिए टूट जाएगा यह उनके अनुरूप नहीं कर सकते हैं बायपास हैं inlined हैं। – JaredPar

2

ज्यादातर मामलों में, नहीं, ऐसा नहीं है।

हालांकि, जब तक आप वास्तविक प्रदर्शन समस्याओं को नहीं देख रहे हैं और उन्हें प्रोफाइलर में ट्रैक किया है, तो आपको इसके बारे में चिंता नहीं करनी चाहिए।

2

सी # कंपाइलर उन्हें कभी अनुकूलित नहीं करेगा। हालांकि .NET JIT कंपाइलर शायद इतना आसान हो सकता है।

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