【发布时间】:2010-02-12 22:03:32
【问题描述】:
我正在创建自己的 DI 框架,该框架将创建委托工厂作为学习练习。我构建类型化委托的方法是使用表达式创建一个函数,该函数引用我的容器和任何构造函数参数调用静态方法。
这引发了一个关于值类型的有趣问题。哪个性能最好:
a) 使用反射选择具有正确参数数量的静态泛型方法,然后使用 MakeGenericMethod 删除泛型
b) 选择老式的参数 Object[] 并在拳击上大放异彩?
【问题讨论】:
-
为什么这个“学习练习”不涉及分析各种设置以找到最佳解决方案? ;-) 不过,我仍然会给 +1。
-
c) 使用带有泛型参数的重载?
-
不太可能,Expression.Call 采用 MethodInfo,因此您必须预先选择具有正确类型的正确方法。
-
哪个较慢无关紧要。相关的问题是它们中的任何一个对于您的应用程序是否足够快?如果事实证明对于您的应用程序来说两者都不够快,那么知道哪个更慢也无济于事。如果事实证明两者都足够快,那么知道哪个更慢在很大程度上是无关紧要的。
-
@Eric Lippert 感谢您的评论,我认为我的标题太消极了,我更感兴趣的是扩展我对反射 v 拳击的性能影响的理解,以帮助我更好地理解 CLR 和 C#。
标签: c# .net performance reflection boxing