C# 如何优化获取/设置属性修饰属性的性能?

C# 如何优化获取/设置属性修饰属性的性能?,c#,reflection,C#,Reflection,在C#中,我用属性标记一些类的属性,并使用反射查找这些属性,以便对它们执行get和set。然而,我发现,以这种方式获取/设置反射的速度大约是POCO获取/设置速度的10倍。除了放弃上面描述的基本场景以使用替代技术外,是否有任何记录在案的技巧来显著提高性能,例如某种缓存技术?好的,您可以在获得属性的PropertyInfo实例后将其存储并映射到任何适合您的键。因为类型是静态的,所以PropertyInfo不会改变,存储本地引用也不会让您丧命 假设您没有做任何愚蠢的事情来缓存该值(比如将所有Prop

在C#中,我用属性标记一些类的属性,并使用反射查找这些属性,以便对它们执行get和set。然而,我发现,以这种方式获取/设置反射的速度大约是POCO获取/设置速度的10倍。除了放弃上面描述的基本场景以使用替代技术外,是否有任何记录在案的技巧来显著提高性能,例如某种缓存技术?

好的,您可以在获得属性的PropertyInfo实例后将其存储并映射到任何适合您的键。因为类型是静态的,所以PropertyInfo不会改变,存储本地引用也不会让您丧命

假设您没有做任何愚蠢的事情来缓存该值(比如将所有PropertyInfo实例放在一个长列表中,并每次迭代该列表以找到它),那么您应该可以了


当然,在你走这条路之前,要确保你没有患上早熟的优化疾病。在进行更改之前,确定在类型实例上不断调用GetProperty/GetProperties是应用程序中的一个瓶颈。

除了casperOne所说的(包括关于检查这是否是瓶颈的部分),您可能会发现将Getter/Setter转换为委托非常有用(分别用于getter和setter的
Func
Action
)使用。这可能会产生巨大的差异,并不十分困难。如果您已经要缓存PropertyInfo,只需缓存委托对即可

我有一个-我第一次在移植协议缓冲区时愤怒地使用了它(有时会很重的反射)。在这种情况下,它帮助了很多