如何比使用DynamicInvoke更快地调用委托?
目前我使用的DynamicInvoke
非常慢。 仍然使用Delegate
类型,我怎样才能直接调用Delegate
没有迟绑定/ DynamicInvoke
?
Delegate _method;
_method.DynamicInvoke(_args);
谢谢。
开源框架Impromptu- FastDynamicInvoke
为Delegate
添加了一个名为FastDynamicInvoke
的扩展方法,该方法通过使用DLR而不是反射运行,比DynamicInvoke
运行速度快了20多倍。
using ImpromptuInterface
...
_method.FastDynamicInvoke(_args);
Invoke
速度更快,但它有点“隐藏”。 从代理类的MSDN
公共语言运行时为每个委托类型提供一个Invoke方法,与委托具有相同的签名。 您不必从C#,Visual Basic或Visual C ++显式调用此方法,因为编译器会自动调用它。 当您想要查找委托类型的签名时,Invoke方法在反射中很有用。
这意味着当你创建一个委托类型时,编译器Invoke
成员添加正确的签名。 这允许调用而无需通过DynamicInvoke
在C#中,你可以像这样使用它:
_method(_args);
//or
_method(typedArg1, typedArg2, andSoOn);
像调整普通方法一样调用它。 这实际上调用了Invoke
,这对你来说应该快得多。
上一篇: How do I invoke a Delegate faster than by using DynamicInvoke?
下一篇: How to add newlines or carriage returns to description on facebook graph API