我从网上看了一些关于c属性和元数据的教程。这很酷,但我想知道它的含义。
加载程序集时是否加载(自定义)属性?或者仅当您使用反射来检索元数据时?
似乎这些属性添加到代码总大小中是因为它被编译到可执行文件中?是这样吗?
是否可以有编译时属性?也就是说,只有定义了调试,属性才会被应用?
我知道有一个办法是这样做:
#if DEBUG
[MyCustomAttribute]
#endif
但我想知道有没有更好的方法?
当使用许多属性时,是否有任何性能/内存警告?我的目标平台是Xbox360(使用C/XNA)。
谢谢!
-斯蒂芬斯
最佳答案
属性有两部分,它们的代码、它们的构造函数参数和属性数据。代码存储在程序集的IL中,数据存储在程序集元数据中。如果不使用属性,则只占用一些虚拟内存空间,但不需要任何计算机资源。
在使用getCustomAttributes()方法之前不会发生任何事情。然后,属性类的代码得到及时编译,就像程序集中的常规代码一样。使用元数据中的属性数据调用构造函数和属性设置器。当内存管理器映射IL、机器代码和元数据页时,这两个页面都会占用一些RAM。