.NET反射 - 检查类型信息并检索属性性能

时间:2013-07-29 20:50:49

标签: c# .net performance reflection attributes

我看过许多关于.NET Reflection性能的文章,我知道调用这些方法并使用反射检索属性值的成本很高,而且比直接调用慢约2x-3x。

但是类型信息和属性呢?我知道类型元数据是在.NET中缓存的...所以我认为这不应该是性能成本高的,它类似于在字典或列表中搜索(但我不确定)... 检查类型信息以检查属性类型和获取属性类型的自定义属性有多慢?

根据属性制作很多东西是不好的做法和设计?

我想要做的是为ASP.NET创建一些基础结构,它将检查自定义属性的许多控件和类型,以便检索有关应在页面上注册的所需JavaScript文件和客户端代码的信息。 / p>

2 个答案:

答案 0 :(得分:4)

基于属性构建体系结构并不是一件坏事,但如果要保持灵活性,则必须引入一个接口/实现,以编程方式独立于属性提供这些信息,并根据属性定义默认实现。

读取属性并不慢但是如果你关心微优化,你可以像这样创建自己的缓存:

static public class Metadata<T>
{
    static public readonly Type Type = typeof(T); //cache type to avoid avcessing global metadata dictionary

    static public class Attribute<TAttribute>
        where TAttribute : Attribute
    {
            static public readonly TAttribute Value = Metadata<T>.Type.GetCustomAttributes(Metadata<TAttribute>.Type).SingleOrDefault() as TAttribute; 
    }
}

//usage
Metadata<MyType>.Attribute<MyAttributeType>.Value; //exception if more then once and null if not defined.

答案 1 :(得分:2)

如果直接分析您的用例,您将获得最佳答案。毕竟,有点反思也不错。很多反思都可以。使用Stopwatch课程为替代方案计时。