C#属性和元数据含义

tep*_*tep 8 c# performance xna attributes metadata

我从网上阅读有关C#属性和元数据的教程.这很酷,但我想知道它的含义.

  1. 加载程序集时是否加载(自定义)属性?或者仅当您使用反射来检索元数据时?

  2. 似乎属性增加了代码大小的总和,因为它被编译到可执行文件中?这是正确的吗?

  3. 是否可以拥有编译时属性?即只有定义了DEBUG才会应用属性?

我知道有人这样做:

#if DEBUG
[MyCustomAttribute]
#endif
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的方法?

  1. 使用大量属性时是否有任何性能/内存警告?我的目标平台将是Xbox 360(使用C#/ XNA).

谢谢!

-Stephanus

Han*_*ant 6

属性有两部分,它们的代码及其构造函数参数和属性数据.代码存储在程序集的IL中,数据存储在程序集元数据中.如果未使用某个属性,则只占用一些虚拟内存空间,但不需要任何计算机资源.

在使用GetCustomAttributes()方法之前没有任何反应.然后,属性类的代码即时编译,就像程序集中的常规代码一样.使用元数据中的属性数据调用构造函数和属性setter.当内存管理器映射IL,机器代码和元数据页面时,您将使用一些RAM.