我有一个类型,我认为使用它作为结构。超过16个字节的结构的最佳解决方案
- 它代表单个值
- 它是不可变的
但问题是,它具有为int 6个字段。
那么我应该为这种类型使用哪种解决方案?
- 保持使用结构?
- 更改为类?
- 或包6点的整数转换成int的阵列,所以它只有一个字段
EDIT
与6的整数字段结构的大小为24个字节,这是巨大的以绕过。 struct的推荐大小不超过16字节
我有一个类型,我认为使用它作为结构。超过16个字节的结构的最佳解决方案
但问题是,它具有为int 6个字段。
那么我应该为这种类型使用哪种解决方案?
EDIT
与6的整数字段结构的大小为24个字节,这是巨大的以绕过。 struct的推荐大小不超过16字节
这取决于你将如何使用它?
仅仅根据您在问题中提供的信息很难回答。
没有看到你的结构,很难说明确任何事情。但我怀疑你应该把它作为一个结构。
WriteOnce<int[]>
怎么样?
小心拳击。如果你的结构将被一个期望Object的方法所使用,它将被强制转换为一个对象,并且你将会有潜在的性能影响。
这是一个reference,更详细地解释它。
我想让它成为一个类(#2),然后你就不必担心它。
使用一个由6个整数组成的数组(#3)可能会让你的代码难以阅读。每个int都带有描述性标识符的类会更好。
通常,当存储两条以上的相关数据时,我喜欢创建一个将它们绑定在一起的类。特别是如果我将作为一个单位传递给他们。
我会建议编写一个基准来衡量不同选项的性能,这是肯定知道的唯一方法。你可能会对结果感到惊讶(我经常这么做)。
(我假设你的关心这里是性能。)
如果数据持有人将是不可改变的,该结构抗类的问题将很可能取决于平均引用数那会存在于每个实例。如果有一个TwentyFourByteStruct [1000]数组,那么该数组将占用24,000个字节,而不管每个元素是否包含不同的值,所有元素都保持相同的值,或者位于中间的某个位置。如果有一个TwentyFourByteClass [1000]数组,那么该数组将需要4,000或8,000个字节(对于32/64位系统),并且每个创建的TwentyFourByteClass实例将需要大约48个字节。如果所有的数组元素碰巧持有对同一TwentyFourByteClass对象的引用,则总数将是4,048或8,048字节。如果所有数组元素都持有对不同TwentyFyByteClass对象的引用,则总数将为52,000或56,000字节。
至于运行时性能,您可以获得的最佳性能通常是通过引用传递结构。按值传递结构将需要复制它们,对于大于16字节的结构(.net包括针对结构为16字节或更小的结构的优化)可能会变得很昂贵,但是通过引用的值类型的成本无论是1字节还是相同16,000字节。
请您提供一些额外的细节。 – 2009-01-04 07:58:14
如果你可以在问题中包含为什么6个int域是一个问题,这将对未来的读者有用。也许这是C#用户的常识,但对我来说并不明显。 – slim 2009-01-04 09:13:11
@软件猴:这是一个三角形。字段是sideA,sideB,sideC,size,seed1,seed2。 – 2009-01-04 10:29:39