有很多的职位上加快反射调用,例子在这里:加快反射调用C#/。NET
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很慢,我想保持在类的泛型参数,我知道我可以锁定这个下降到对象并将其转换为HandleMessage方法,但我试图避免这样做。
我能做些什么来加快速度?目前比直接呼叫慢几个数量级。
任何帮助,将不胜感激。
这似乎是抛出RuntimeBinderException:'X'的最佳重载方法匹配有一些无效的参数。 – Rob
@Rob:'((动态)处理程序).HandleMessage((动态)消息)''? – Gabe
工作! :) Woot! – Rob