[英]Performance overhead of using attributes in .NET
1 ..使用属性是否会导致性能开销? 考虑一个像这样的课程:
public class MyClass
{
int Count {get;set;}
}
它有10个服装(属性是类,其中属性类本身比MyClass本身要大得多,例如:
public class FirstAttribute : Attribute
{
int A,B,C,D,E,F,G,H,I,J ... {get;set;}
}
2 ..每次实例化MyClass
,这些属性中的10个会成为内存开销吗? ( FirstAttribute
是MyClass
的大小的10倍,将使用其中的10个进行修饰,因此,与装饰在其上的属性的总大小相比,使实际对象本身是如此之小。)这是否值得关注?
3 ..这种情况对于结构(结构是值类型,属性是引用类型)会有所不同吗?
4 ..关于附属物,附属物存储在内存中的什么位置? 他们如何联系在一起?
5 ..是否在初始化MyClass
时或在使用反射来检索属性时对属性进行了初始化?
就空间而言,开销很小,但不是很多-属性不会妨碍正常执行。
不,属性作用于类型,而不是实例,因此,通过使用大量的“大”属性,您不会占用大量内存。 (我不知道您是针对泛型的每种具体类型获得一种,还是针对每种泛型类型定义获得一种-我希望后者...)
否,因为答案为1。
属性不附加在对象上,而是附加在类型上。 我不知道它们在内存中的确切存储位置的详细信息,但这仍然是实现的详细信息。
仅在使用反射时才初始化属性。
乔恩·斯基特(Jon Skeet)是绝对正确的人,我只想再提出一个概念:
如果查看所有属性的基类System.Attribute,您会注意到,它的大多数成员都是static 。 因此,无论您有多少个Attribute实例,它们仅存在一次。
这只是强调的另一点,即属性并不太昂贵...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.