由方法性能返回的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分配给任何类字段,我只会在方法体中读取它,并且可能会将它传递到几个方法调用中,因此它将出现在几个局部作用域中。
你:
因为这就像是表演自杀
你为什么这么认为?你所指的结构和类之间的区别是什么?
我认为如果你觉得它或多或少像"原始类型"(你的话),你应该使用struct。这只是三个float
值(可能总共96位),所以对于一个值类型来说,它足够小。但是,如果您坚持使用结构体,则将字段设置为readonly
。