目前我使用的DynamicInvoke
非常慢。仍在使用Delegate
类型,如何在没有后期绑定/ Delegate
的情况下直接调用DynamicInvoke
?
Delegate _method;
_method.DynamicInvoke(_args);
感谢。
答案 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
,这对你来说要快得多。