C#struct中的数组是否会破坏性能优势?

时间:2012-06-27 01:32:34

标签: c# performance optimization

据说C#结构对轻量级数据对象的类有一些性能优势,因为它们完全存储在堆栈上而不是分配堆内存。

如果该结构的一个成员是int []或结构数组,那么它对分配有什么影响,以及我可能从中获得的任何其他性能优势?

示例:

struct A
{
    int foo;
    int bar;
}

struct B
{
   int[] foos;
   A[] bars;
}

struct A在性能,内存使用等方面与struct B有何不同?

2 个答案:

答案 0 :(得分:2)

由于大小不是类型的一部分,因此必须动态分配数组。所以你的struct只包含一个指向数组的指针。

struct本身是堆栈分配*但数组内容仍然在堆上。

*一般。在某些情况下,值类型是堆分配的,例如是匿名方法中使用的外部变量。当然,如果它是堆分配的对象的一部分,则结构在堆上内联分配。可能还有一些其他的角落案例,但这并不重要。

答案 1 :(得分:0)

结构中的数组不会破坏结构的堆栈与堆分配的性能优势。如果你真的有一个好处;)。在创建数组实例时,结构中的数组将在堆上分配。