मैं सी # में किए गए एक पीएसपी एमुलेटर का लेखक हूं।डायनामिक मोडस प्रीलिंक
मैं "DynamicMethod" ILGenerator का उपयोग कर के बहुत सारे पैदा कर रहा हूँ। मैं असेंबली कोड को एएसटी में परिवर्तित कर रहा हूं, और उसके बाद आईएल कोड उत्पन्न कर रहा हूं और डायनेमिक मोड का निर्माण कर रहा हूं। मैं इसे एक और थ्रेड में कर रहा हूं, इसलिए जब मैं प्रोग्राम दूसरों को निष्पादित कर रहा हूं तो मैं नई विधियां उत्पन्न कर सकता हूं ताकि यह आसानी से चल सके।
मेरी समस्या यह है कि देशी कोड पीढ़ी आलसी है, इसलिए जब मशीन को कॉल किया जाता है तो मशीन कोड उत्पन्न होता है, जब आईएल उत्पन्न नहीं होता है। तो यह थ्रेड निष्पादित प्रोग्राम में उत्पन्न होता है, देशी कोड पीढ़ी काफी धीमी है क्योंकि यह asm-> ast-> il step है।
मैं Marshal.Prelink विधि है कि यह समारोह निष्पादित करने से पहले मशीन कोड उत्पन्न करने के लिए माना जाता है की कोशिश की है। यह मोनो पर काम करता है, लेकिन यह एमएस .NET पर काम नहीं करता है।
Marshal.Prelink(MethodInfo);
क्या एमएस .NET पर एक डायनामिक मोड को प्रीलिंक करने का कोई तरीका है?
मैं समारोह के लिए एक बूलियन पैरामीटर कहा कि अगर निर्धारित करते हैं, समारोह तुरंत ताकि कोई कोड वास्तव में क्रियान्वित किया जाता है बाहर निकालता है सोचा। मैं उस तरह से "प्रीलिंक" कर सकता था, लेकिन मुझे लगता है कि यह एक बुरा समाधान है जिसे मैं टालना चाहता हूं।
कोई विचार?
मुझे वास्तव में समझ में नहीं आता कि एक प्रतिनिधि बल जेआईटी क्यों बनायेगा। और दूसरी विधि सीईआर (बाधित निष्पादन क्षेत्रों) के साथ प्रयोग की जानी चाहिए, यह सुनिश्चित नहीं है कि यह सही तरीका है। – svick