Tag: 动态调用

可以在此通用代码中避免Delegate.DynamicInvoke吗?

这个问题部分是关于代表,部分是关于generics。 鉴于简化的代码: internal sealed class TypeDispatchProcessor { private readonly Dictionary _actionByType = new Dictionary(); public void RegisterProcedure(Action action) { _actionByType[typeof(T)] = action; } public void ProcessItem(object item) { Delegate action; if (_actionByType.TryGetValue(item.GetType(), out action)) { // Can this call to DynamicInvoke be avoided? action.DynamicInvoke(item); } } } 我在其他地方读到,直接调用委托(带括号)比调用DynamicInvoke快DynamicInvoke数量级,这是有道理的。 对于上面的代码示例,我想知道我是否可以执行类型检查并以某种方式提高性能。 一些上下文:我有一个对象流,可以在各种处理程序中进行处理,这些处理程序可以在运行时注册/取消注册。 上面的模式完全符合我的目的,但如果可能的话,我想让它变得更加快捷。 一种选择是将Action存储在Dictionary ,并使用另一个委托包装Action委托。 我还没有比较第二次间接调用会影响的性能变化。