2008-09-27 12 views
11

हाल ही में मैंने कुछ और खोज के दौरान सी # रनटाइम संकलन के बारे में एक और साइट पर एक संक्षिप्त चर्चा पर विचार किया और सोचा कि विचार दिलचस्प था। क्या आपने कभी इसका इस्तेमाल किया है? मैं यह निर्धारित करने की कोशिश कर रहा हूं कि कोई इसका उपयोग कैसे कर सकता है और यह किस समस्या को हल करता है। मुझे यह सुनने में बहुत दिलचस्पी होगी कि आपने इसका उपयोग कैसे किया है या किस संदर्भ में यह समझ में आता है।आप सी # रनटाइम संकलन का उपयोग कहां करेंगे?

बहुत धन्यवाद।

उत्तर

7

आमतौर पर, मुझे यह उन मामलों में उपयोग किया जाता है जहां आप वर्तमान में प्रतिबिंब का उपयोग कर रहे हैं और प्रदर्शन के लिए अनुकूलित करने की आवश्यकता है।

उदाहरण के लिए, कॉल विधि एक्स पर प्रतिबिंब का उपयोग करने के बजाय, आप रनटाइम पर एक गतिशील विधि उत्पन्न करते हैं ताकि यह आपके लिए किया जा सके।

+0

प्रतिक्रिया के लिए धन्यवाद! – itsmatt

+0

यदि आप 'EVAL()' आदि जैसे गतिशील चीजें करना चाहते हैं, तो हमें रनटाइम संकलन – Zasz

2

गतिशील कोड उत्पन्न करते समय आप इसका उपयोग कर सकते हैं कम से कम एक मामला है। उदाहरण के लिए, ढांचा फ्लाई पर एक्सएमएल सीरियलाइज़र उत्पन्न करने के लिए आंतरिक रूप से इसका उपयोग कर रहा है। रनटाइम पर कक्षा में देखने के बाद, यह कक्षा को क्रमबद्ध/deserialize करने के लिए कोड उत्पन्न कर सकते हैं। इसके बाद यह उस कोड और उपयोगकर्ताओं को आवश्यकतानुसार संकलित करता है। उसी तरह आप मनमानी डीबी टेबल इत्यादि को संभालने के लिए कोड उत्पन्न कर सकते हैं और फिर जेनरेट असेंबली संकलित और लोड कर सकते हैं।

+0

की अवधारणा की आवश्यकता हो सकती है, यह एक अच्छा उदाहरण है कि ट्रेडऑफ प्रतिबिंब या गतिशील रूप से जेनरेट किए गए सीरियलाइज़र – therealhoff

2

ठीक है, सभी सी # कोड रन-टाइम संकलित है, क्योंकि यह एक जेआईटी (बस-इन-टाइम) कंपाइलर है। मुझे लगता है कि आप प्रतिबिंब का जिक्र कर रहे हैं। फ्लाई पर कक्षाएं आदि बनाने के लिए प्रवेश करें। यहां एक उदाहरण दिया गया है जिसे मैंने हाल ही में Xml-Rpc.Net लाइब्रेरी में देखा है।

मैं एक सी # इंटरफेस बनाता हूं जिसमें एक एक्सएमएल-आरपीसी सेवा की विधि कॉल के समान हस्ताक्षर है, उदा।

IMyProxy : IXmlRpcProxy 
{ 
    [XmlRpcMethod] 
    int Add(int a, int b); 
} 

तब मेरे कोड में मैं मेरे लिए एक पूरी तरह कार्यात्मक प्रॉक्सी बनाने के लिए

IMyProxy proxy = (IMyProxy)XmlRcpFactory.Create(typeof(IMyProxy)); 

इस का उपयोग करता रन-टाइम कोड पीढ़ी की तरह कुछ कहते हैं, तो मैं इसे इस तरह का उपयोग कर सकते हैं:

int result = proxy.Add(1, 2); 

यह तब मेरे लिए एक्सएमएल-आरपीसी कॉल को संभालता है। बहुत अच्छा।

+0

पर आधारित एक धारावाहिक है, यह दिलचस्प है और यह मेरे लिए थोड़ा सा स्पष्ट करने में मदद करता है। धन्यवाद, मैट। – itsmatt

2

मैंने अपने डिप्लोमा थीसिस में .NET से रनटाइम कंपाइलर सेवाओं का उपयोग किया। असल में, यह एक प्रक्रिया विज़ुअलाइजेशन के लिए कुछ ग्राफिकल घटक बनाने के बारे में था, जिसे सी # कोड के रूप में जेनरेट किया गया है, जिसे एक असेंबली में संकलित किया गया है और इसका उपयोग बिना किसी व्याख्या किए लक्षित लक्ष्य प्रणाली पर किया जा सकता है, ताकि इसे तेज़ और अधिक कॉम्पैक्ट बनाया जा सके। और, बोनस के रूप में, जेनरेट की गई छवियों को संसाधनों के समान असेंबली में पैक किया जा सकता है।

इसका अन्य उपयोग जावा में था। मेरे पास एक ऐसा एप्लिकेशन था जिसने कुछ संख्यात्मक एल्गोरिदम (विश्वविद्यालय में वापस आ गया) का उपयोग करके संभावित रूप से महंगे फ़ंक्शन को प्लॉट करना था, उपयोगकर्ता प्रवेश कर सकता था। मैंने दर्ज किए गए फ़ंक्शन को एक कक्षा में रखा, संकलित और इसे लोड किया और यह अपेक्षाकृत तेज़ निष्पादन के लिए उपलब्ध था।

तो, ये मेरे दो अनुभव हैं जहां रनटाइम कोड पीढ़ी एक अच्छी बात थी।

2

जो कुछ मैंने इसका उपयोग किया था वह सी # और वीबी कोड को उपयोगकर्ता विज्ञापन-प्रसार द्वारा चलाने की अनुमति देने के लिए था। वे कोड (या दो पंक्तियों) की एक पंक्ति में टाइप कर सकते हैं और इसे संकलित किया जाएगा, एक ऐप डोमेन में लोड किया जाएगा, और निष्पादित किया जाएगा, और फिर अनलोड किया जाएगा। यह शायद इसके उपयोग का सबसे अच्छा उदाहरण नहीं है, लेकिन इसका एक उदाहरण कम से कम

+0

पवित्र गाय! कृपया मुझे बताएं कि आपने यह साबित करने के लिए किया था कि आप कर सकते हैं। :) – MusiGenesis

+0

हे। किंडा मजाकिया, लेकिन d2botnet, यह डायब्लो 2 के लिए एक नेट बॉटिंग इंजन था। लोगों ने गेम को स्वचालित करने के लिए .net में बॉट्स लिखे थे। मैंने चैट संवाद से भी टाइप करने में सक्षम होने के लिए अनुमति दी: exec cs SOMECODE, या exec vb SOMECODE। उदाहरण के लिए, अपने एक्स, वाई exec cs game.Print (Me.X + "+ Me.Y) प्राप्त करने के लिए; ... – mattlant

+0

लेकिन आप वास्तव में रचनात्मक हो सकते हैं और जो कुछ भी आप चाहते थे उसे डाल सकते हैं। मुझे खींचना होगा इसे करने के लिए वास्तविक कोड को पकड़ने के लिए स्रोत को ऊपर ले जाएं। – mattlant

5

आप इसका उपयोग अपने आवेदन में स्क्रिप्टिंग समर्थन जोड़ने के लिए कर सकते हैं। उदाहरण के लिए here या here देखें।

स्क्रिप्टिंग भाग में अपने आंतरिक ऑब्जेक्ट फ्रेमवर्क के कुछ हिस्सों को प्रकाशित करना काफी आसानी से संभव है, ताकि आप सापेक्ष आसानी से अपने एप्लिकेशन में कुछ जोड़ सकें जिसका उदाहरण Office के लिए VBA जैसा ही प्रभाव हो।

+0

जानकारी और लिंक के लिए धन्यवाद! – itsmatt

3

मैंने गतिशील प्रॉक्सी (Code project sample) या प्रतिबिंब कॉल (समय-वार) अनुकूलित करने के अन्य माध्यमों को उत्पन्न करने में यह (रनटाइम संकलन/सिस्टम का उपयोग। रिफ्लेक्शन.इमिट क्लास) देखा है।

+0

लिंक के लिए धन्यवाद, आंद्रेई! लिंक की सराहना करें। – itsmatt

+0

आपका स्वागत है :) –

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