繁体   English   中英

在.NET中使用属性的性能开销

[英]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个会成为内存开销吗? FirstAttributeMyClass的大小的10倍,将使用其中的10个进行修饰,因此,与装饰在其上的属性的总大小相比,使实际对象本身是如此之小。)这是否值得关注?

3 ..这种情况对于结构(结构是值类型,属性是引用类型)会有所不同吗?

4 ..关于附属物,附属物存储在内存中的什么位置? 他们如何联系在一起?

5 ..是否在初始化MyClass时或在使用反射来检索属性时对属性进行了初始化?

  1. 就空间而言,开销很小,但不是很多-属性不会妨碍正常执行。

  2. 不,属性作用于类型,而不是实例,因此,通过使用大量的“大”属性,您不会占用大量内存。 (我不知道您是针对泛型的每种具体类型获得一种,还是针对每种泛型类型定义获得一种-我希望后者...)

  3. 否,因为答案为1。

  4. 属性不附加在对象上,而是附加在类型上。 我不知道它们在内存中的确切存储位置的详细信息,但这仍然是实现的详细信息。

  5. 仅在使用反射时才初始化属性。

乔恩·斯基特(Jon Skeet)是绝对正确的人,我只想再提出一个概念:

如果查看所有属性的基类System.Attribute,您会注意到,它的大多数成员都是static 因此,无论您有多少个Attribute实例,它们仅存在一次。

这只是强调的另一点,即属性并不太昂贵...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM