我看过许多关于.NET Reflection性能的文章,我知道调用这些方法并使用反射检索属性值的成本很高,而且比直接调用慢约2x-3x。
但是类型信息和属性呢?我知道类型元数据是在.NET中缓存的...所以我认为这不应该是性能成本高的,它类似于在字典或列表中搜索(但我不确定)... 检查类型信息以检查属性类型和获取属性类型的自定义属性有多慢?
根据属性制作很多东西是不好的做法和设计?
我想要做的是为ASP.NET创建一些基础结构,它将检查自定义属性的许多控件和类型,以便检索有关应在页面上注册的所需JavaScript文件和客户端代码的信息。 / p>
答案 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
课程为替代方案计时。