方法性能返回的C#结构

时间:2013-01-17 16:05:42

标签: c# performance memory-management struct

假设我有这样的结构:

public struct MyCustomDataset : IEnumerable<float> {
    public float v1;
    public float v2;
    public float v3;

    public MyCustomDataset(float v1, float v2, float v3) {
        this.v1 = v1;
        this.v2 = v2;
        this.v3 = v3;
    }

    // Enumerable impl
    public IEnumerator<float> GetEnumerator() {
        yield return v1;
        yield return v2;
        yield return v3;
    }
    IEnumerator IEnumerable.GetEnumerator() {
        return GetEnumerator();
    }
}

这样的方法:

public static MyCustomDataset test() {
    return new MyCustomDataset(1,2,3);
}

public static void test2() {
    MyCustomDataset ds = test();
    /* doing stuff with ds */
}

如果MyCustomDataset是class而不是struct,我想知道它是否更优。我需要知道,因为我在应用程序主循环中调用test(),所以MyCustomDataset将在每个应用程序迭代中分配。因此,我不会让MyCustomDataset成为一个班级,因为它会像表演自杀一样。我正在考虑使用struct,因为我怀疑它在这种情况下可能表现得或多或少像原始类型。

表现会好吗?

我不打算将MyCustomDataset分配给任何类字段,我只会在方法体中读取它,并且可能会将它传递给一些方法调用,因此它将存在于少数局部范围内。

1 个答案:

答案 0 :(得分:2)

您:

  

因为这就像表演自杀

你为什么这么认为?你指的是结构和类之间有什么区别?

我认为你应该使用结构,如果你觉得它或多或少像“原始类型”(你的话)。这只是三个float值(可能总共96位),因此它对于值类型来说足够小。但是如果您坚持使用结构,请创建字段readonly