Saa*_*ail 10 .net c# performance attributes
我想知道.Net中的属性,特别是C#的使用是否昂贵,为什么或为什么不呢?
我特别询问C#,除非不同的.Net语言之间没有区别(因为基类库是相同的?).
所有较新的.Net技术都广泛使用了属性,例如Linq to SQL,ASP.Net MVC,WCF,企业库等,我想知道这会对性能产生什么影响.很多类都会使用某些属性自动修饰,或者某些功能/特性需要这些属性.
费用问题是否取决于具体实施细节?如何将属性编译为IL?它们是自动缓存的,还是由实现者决定的?
Jon*_*eet 19
"属性的使用"太模糊了.获取属性是一种有效的反射操作 - 您不希望在循环中定期执行 - 但是包含在元数据中并不昂贵,而典型的使用模式(IMO)是构建一些其他表示(例如,读取属性一次后的内存中架构.
可能有一些缓存涉及,但我可能会缓存其他表示.例如,如果我用描述来装饰枚举值,我通常会获取属性一次以构建字符串到枚举字典(反之亦然).
这取决于您如何使用它们...某些属性仅用于信息目的(例如ObsoleteAttribute),因此它们对运行时性能没有任何影响.其他属性由编译器(如DllImportAttribute)或后编译器(如PostSharp)使用,因此成本是在编译时,而不是运行时.但是,如果使用反射在运行时检查属性,则可能会很昂贵.