我经常听到反射的糟糕程度.虽然我一般都避免反思,很少发现没有它就无法解决问题的情况,我想知道......
对于那些在应用程序中使用过反射的人,你是否测量过性能命中率,是否真的如此糟糕?
很抱歉提出这个问题,但我找不到适合此任务的解决方案:
我有一个枚举,名为"myEnum"(函数不知道MyEnum)我需要获取myEnum值的int值
示例:
程序员将其枚举命名为"myEnum":
public enum myEnum
{
foo = 1,
bar = 2,
}
Run Code Online (Sandbox Code Playgroud)
我的函数应该执行以下操作:通过字符串获取"myEnum"的"foo"值
功能应该打开:
public int GetValueOf(string EnumName, string EnumConst)
{
}
Run Code Online (Sandbox Code Playgroud)
所以当程序员A打开它时:
int a = GetValueOf("myEnum","foo");
Run Code Online (Sandbox Code Playgroud)
它应该返回1
当程序员B有一个名为"mySpace"的枚举时,想要返回值为5的"bar"
int a = GetValueOf("mySpace","bar")
Run Code Online (Sandbox Code Playgroud)
应该返回5
我怎样才能做到这一点?
可能重复:
反思的"成本"是多少?
有没有人对普遍接受的口头禅有一个很好的解释reflection == bad performance?
例如,与直接访问所有属性相比,迭代类型的属性集合并从此类型的实例中提取所有属性值有多昂贵?一个等级?二?它取决于什么?它可以预测吗?引擎盖下发生了什么?
编辑:感谢您的答案到目前为止.我已经研究了你提供的一些链接,似乎与直接访问相比,有关物业反思的估计差距很大:从慢2.5倍到慢200倍.
这对我来说似乎不太合理.有些人提到了.Net的更高版本中的性能改进,所以让我的问题缩小到.Net 4.0.有人有任何基准吗?