由方法性能返回的c#结构

本文关键字:结构 返回 方法 性能 | 更新日期: 2023-09-27 17:54:08

假设我有一个这样的结构体:

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是类而不是结构。我需要知道,因为我调用测试()在应用程序的主循环,所以MyCustomDataset将被分配在每个应用程序的迭代。正因为如此,我不会让MyCustomDataset一个类,因为它会像性能自杀。我考虑使用struct,因为我怀疑在这种情况下,它的行为或多或少会像基本类型。

性能可以吗?

我不打算将MyCustomDataset分配给任何类字段,我只会在方法体中读取它,并且可能会将它传递到几个方法调用中,因此它将出现在几个局部作用域中。

由方法性能返回的c#结构

你:

因为这就像是表演自杀

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

我认为如果你觉得它或多或少像"原始类型"(你的话),你应该使用struct。这只是三个float值(可能总共96位),所以对于一个值类型来说,它足够小。但是,如果您坚持使用结构体,则将字段设置为readonly