2010-05-10 3 views
6

मैं संकलित कर सकता हूं, एक उदाहरण प्राप्त कर सकता हूं और किसी भी सी # प्रकार प्रोग्रामेटिकल की विधि का आह्वान कर सकता हूं। उस पर बहुत सारी जानकारी है, जिसमें स्टैक ओवरफ्लो (How can I evaluate a C# expression dynamically?) शामिल हैं। मेरी समस्या यह है कि मैं वेब वातावरण में हूं और कुछ भी/bin निर्देशिका में सहेज नहीं सकता। उपर्युक्त लिंक सुझाए गए अनुसार मैं "इन-मेमोरी" संकलित कर सकता हूं लेकिन फिर मैं वर्तमान ऐपडोमेन से अपनी कस्टम असेंबली को "अनलोड" करने में सक्षम नहीं हूं। थोड़ी देर के बाद यह एक बड़ी स्मृति समस्या बन जाएगा। क्या एक नया ऐपडोमेन खोलना संभव है, नई असेंबली "इन-मेमोरी" संकलित करें, कुछ अभिव्यक्ति का मूल्यांकन करें या उस नए एपडोमेन के अंदर उस असेंबली के कुछ सदस्य तक पहुंचें और ऐपडॉमेन को सुरक्षित रूप से मार दें, सबकुछ हार्ड ड्राइव पर कुछ भी बचाए बिना ? किसी भी लिंक, सुझाव इत्यादि के लिए अग्रिम धन्यवादक्या मैं डिस्क पर असेंबली को सहेजे बिना सी # अभिव्यक्ति को संकलित और निष्पादित कर सकता हूं?

+0

यदि आपको केवल ज्ञात प्रकार (और अधिक जटिल अभिव्यक्ति का संकलन नहीं) की मनमानी विधि तक पहुंच की आवश्यकता है, तो आप टाइप क्लास और Delegate.CreateDelegate की GetMethod विधि का उपयोग कर सकते हैं। यदि संभव हो तो मैं एक नया ऐपडोमेन का उपयोग करने से बचने की कोशिश करता हूं, क्योंकि उपयुक्त मार्शलिंग प्राप्त करने के लिए बहुत सी नई जटिलता हो सकती है। –

+0

मुझे फ्लाई पर सी # अभिव्यक्ति का मूल्यांकन करने की बहुत आवश्यकता है। वही पुराना बूल आर = इवल ("3> 2"); जहां इवल कुछ भी है जो डिस्क को छूए बिना बूल का मूल्यांकन करने में मेरी मदद करेगा। तो, नहीं, अकेले प्रतिबिंब यहां मदद नहीं करेगा। धन्यवाद, हालांकि :) – Sasha

उत्तर

2

क्या आपने DynamicMethod टाइप में देखा है .Net? इस प्रकार Reflection.Emit का उपयोग कर स्मृति विधियों में सक्षम कचरा संग्रह बनाता है। यह वही लगता है जो आप खोज रहे हैं।

+0

मैंने पूरी तरह से संपूर्ण डायनामिक विधि विधि को याद किया। पहले से पढ़ रहा है ... फिर भी यह नहीं देख सकता कि बी = मूल्यांकन ("5 <6") जैसी साधारण चीज़ का मूल्यांकन करने के लिए इसका उपयोग कैसे किया जाए। और अधिक देखकर, उम्मीद है कि मुझे कुछ याद आती है। धन्यवाद! – Sasha

1
+0

लेखक कहते हैं कि मैंने अपने प्रश्न में भी क्या कहा है: आप या तो बड़ी स्मृति समस्या से फंस गए हैं या आप अपने स्वयं के ऐपडोमेन में एक नया कोड निष्पादित करते हैं। लेकिन लेख खुद मजेदार था, साझा करने के लिए धन्यवाद! – Sasha