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 的回答。
属性不附加到对象 - 它们附加到类型。我不知道它们在内存中的存储位置的确切细节,但无论如何这是一个实现细节。
只有在使用反射时才会初始化属性。
关于c# - 在 .NET 中使用属性的性能开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703876/