代码之家  ›  专栏  ›  技术社区  ›  Saajid Ismail

在.NET中使用属性是否昂贵?

  •  10
  • Saajid Ismail  · 技术社区  · 15 年前

    我想知道在.NET中使用属性,特别是C是否很昂贵,为什么要这样做?

    我特别询问关于C的问题,除非不同的.NET语言之间没有区别(因为基类库是相同的?).

    所有较新的.NET技术都广泛地使用了属性,如Linq to SQL、ASP.NET MVC、WCF、企业库等,我想知道这会对性能产生什么影响。许多类会自动用某些属性进行修饰,或者这些属性是某些功能/特性所必需的。

    费用问题是否取决于具体实施细节?如何将属性编译为IL?它们是自动缓存的,还是由实现者决定?

    2 回复  |  直到 15 年前
        1
  •  19
  •   Jon Skeet    15 年前

    “属性的使用”太模糊了。获取属性是一种有效的反射操作—您不希望定期在循环中进行—但在元数据中包含这些属性并不昂贵,而且典型的使用模式(IMO)是在读取属性一次之后构建一些其他表示(例如内存模式)。

    可能会涉及到一些缓存,但我可能会缓存其他表示。例如,如果我用描述来修饰枚举值,我通常会获取属性 一旦 建立一个字符串到枚举字典(或相反)。

        2
  •  6
  •   Thomas Levesque    15 年前

    这取决于你如何使用它们…有些属性只是用于信息目的(例如obsoleteattribute),因此它们对运行时性能没有任何影响。其他属性由编译器(如dllimportattribute)或postsharp等后期编译器使用,因此成本在编译时,而不是运行时。但是,如果您在运行时使用反射来检查属性,那么代价可能很高。