代码之家  ›  专栏  ›  技术社区  ›  Jon Davis Glenn Block

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

  •  3
  • Jon Davis Glenn Block  · 技术社区  · 16 年前

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

    2 回复  |  直到 16 年前
        1
  •  7
  •   AaronLS    10 年前

    超越casperOne所说的(包括关于检查这是否是瓶颈的部分),您可能会发现它 非常 Func<T> Action<T> 分别用于getter和setter)使用 Delegate.CreateDelegate

    我有一本书 blog post about Delegate.CreateDelegate -我第一次在移植协议缓冲区时愤怒地使用了它(有时可能是反射沉重的)。在那种情况下,它起了很大的作用。

        2
  •  3
  •   casperOne    16 年前

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

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

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