如何比使用DynamicInvoke更快地调用委托?

时间:2010-10-11 13:50:47

标签: c# .net .net-3.5 delegates

目前我使用的DynamicInvoke非常慢。仍在使用Delegate类型,如何在没有后期绑定/ Delegate的情况下直接调用DynamicInvoke

Delegate _method;    
_method.DynamicInvoke(_args);

感谢。

2 个答案:

答案 0 :(得分:4)

开源框架Impromptu-Inteface为名为Delegate的{​​{1}}添加了一种扩展方法,通过使用DLR而非反射,其运行速度比FastDynamicInvoke快20多倍。

DynamicInvoke

...

using ImpromptuInterface

答案 1 :(得分:0)

Invoke速度更快,但它有点“隐藏”。来自MSDN on Delegate class

  

公共语言运行库提供   每个委托的Invoke方法   类型,与签名相同   代表。你不必打电话给这个   显式来自C#,Visual   基本或Visual C ++,因为   编译器自动调用它。该   Invoke方法在反射中很有用   当你想找到签名时   代表类型。

这意味着当您创建委托类型时,编译器会为Invoke成员添加正确的签名。这允许在不经过DynamicInvoke

的情况下进行呼叫

在c#中,您可以使用它:

_method(_args);
//or
_method(typedArg1, typedArg2, andSoOn);
像正常的方法一样调用它。这实际上会调用Invoke,这对你来说要快得多。