Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中使用属性的性能开销_C#_.net_Performance_Reflection_Attributes - Fatal编程技术网

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

C# 在.NET中使用属性的性能开销,c#,.net,performance,reflection,attributes,C#,.net,Performance,Reflection,Attributes,一,。。使用属性是否会导致性能开销?思考一门课,比如: 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个会是内存开销吗?

一,。。使用属性是否会导致性能开销?思考一门课,比如:

    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,您会注意到,它的大多数成员都是静态的。因此,无论有多少个属性实例,它们只存在一次


    这只是需要强调的另一点,属性并不太昂贵…

    谢谢Jon,你太快了。我现在明白了。属性只是引用类型的对象,所以它们被实例化并存储在内存中,与任何其他对象的方式完全相同。