我看过很多关于.NET反射性能的文章,我知道使用反射调用方法和检索属性值会耗费大量性能,而且比直接调用慢2到3倍。
但是类型信息和属性呢?我知道Types元数据是缓存在.NET中的…所以我认为它的性能不应该很高,而且它类似于在字典或列表中搜索(但我不确定)
检查类型信息以检查属性的类型以及获取属性类型的自定义属性的速度有多慢?
让许多东西基于属性工作是不是不好的实践和设计?
我想做的是为ASP.NET创建一些基础设施,它将检查自定义属性的许多控件和类型,以便检索有关所需JavaScript文件和应该在页面上注册的客户端代码的信息。
构建一个基于属性的体系结构并不是一件坏事,但如果你想保持灵活性,你必须引入一个接口/实现,以程序方式独立于属性提供这些信息,并基于属性定义默认实现。
读取属性并不慢,但如果你关心微观优化,你可以创建自己的缓存,如下所示:
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.
如果您直接评测您的用例,您将获得最佳答案。毕竟,稍微反思一下也不错。可以进行大量反思。使用Stopwatch
类为备选方案计时。