प्रतिबिंब को तेज करने पर पदों के बहुत सारे का आह्वान, उदाहरण यहाँ हैं:।बढ़ाता प्रतिबिंब आह्वान सी #/नेट
Speeding up Reflection API with delegate in .NET/C#
https://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and-exploring-delegates/
और यहाँ:
Example : Speeding up Reflection API with delegate in .NET/C#
मेरा प्रश्न सामान्य आवेषण को तेज करने के बारे में है। क्या यह वास्तव में संभव है?
मैं एक अमूर्त वर्ग और एक वर्ग है जो इसे लागू करता है ...
public abstract class EncasulatedMessageHandler<T> where T : Message
{
public abstract void HandleMessage(T message);
}
public class Handler : EncasulatedMessageHandler<MyMessageType>
{
public int blat = 0;
public override void HandleMessage(MyMessageType message) { blat++; }
}
क्या मैं इन संदेश हैंडलर वर्गों की सूची और उनकी HandleMessage (निर्माण और जल्दी से आह्वान किया गया है क्या करना चाहते हैं)
object handler = Activator.CreateInstance(typeof(Handler)); // Ignore this, this is done up front.
MethodInfo method = type.GetMethod("HandleMessage", BindingFlags.Instance | BindingFlags.Public);
Action<object> hook = new Action<object>(delegate(object message)
{
method.Invoke(handler, new object[] { message });
});
// Then when I want to invoke it:
hook(new MyMessageType());
:
पल में, मैं कुछ लगभग इस बात यह है कि कर रहा हूँ
पूरी बात नहीं है यही कारण है कि है, लेकिन यह महत्वपूर्ण सामग्री है ...
method.Invoke बहुत धीमी है, मैं कक्षा पर सामान्य मापदंडों रखना चाहते हैं, मुझे लगता है मैं करने के लिए इस पर ताला लगा सकता है एहसास ऑब्जेक्ट करें और इसे हैंडल मैसेज विधि में डालें, लेकिन मैं ऐसा करने से बचने की कोशिश कर रहा हूं।
क्या यह कुछ भी करने के लिए मैं कर सकता हूं? वर्तमान में प्रत्यक्ष कॉल की तुलना में परिमाण धीमा है।
किसी भी मदद की सराहना की जाएगी।
यह रनटाइमबिन्डर अपवाद को फेंकने लगता है: 'एक्स' के लिए सबसे अच्छा ओवरलोडेड विधि मिलान में कुछ अमान्य तर्क हैं। – Rob
@Rob: '((गतिशील) हैंडलर के बारे में क्या) .हैंडलमेसेज (गतिशील) संदेश)'? – Gabe
यह काम करता है! :) जूट! – Rob