Optimal solution for struct with more than 16 bytes
我有一个我认为用作结构的类型。
- 它表示单个值
- 它是不可变的。
但问题是,它有6个int字段。
那么我应该为这种类型使用哪种解决方案呢?
编辑
带有6个整型字段的结构的大小为24字节,这对于传递来说是巨大的。建议结构大小不超过16字节
这取决于你将如何使用它?
仅仅从你在问题中提供的信息就很难回答。
小心拳击。如果您的结构将被一个需要对象的方法使用,那么它将被强制转换为一个对象,并且您可能会受到性能影响。
这里有一个更详细的参考资料。
我会让它成为一个班级(2),然后你就不用担心了。
使用六个整数(3)的数组可能会使代码更难读取。对于每个int使用描述性标识符的类会更好。
如果数据持有者是不可变的,那么结构与类的问题很可能取决于每个实例存在的平均引用数。如果一个数组有twentyfourbytestruct[1000],那么该数组将占用24000字节,不管每个元素是否具有不同的值,所有元素都具有相同的值,或者介于两者之间。如果一个数组有twentyFourByteClass[1000],该数组将占用4000或8000字节(对于32/64位系统),创建的twentyFourByteClass的每个不同实例将占用大约48字节。如果所有数组元素恰好包含对同一个twentyFourByteClass对象的引用,那么总计将为4048或8048字节。如果所有数组元素都包含对不同的twentyFourByteClass对象的引用,那么总计将为52000或56000字节。
至于运行时性能,您可以得到的最佳性能通常是通过引用传递结构。按值传递结构将需要复制它们,这对于大于16字节的结构(NET包括对16字节或更小的结构的优化)可能会很昂贵,但按引用传递值类型的成本与1字节或16000字节的成本相同。
我建议写一个小基准来衡量不同选择的表现,这是唯一确定的方法。你可能会对结果感到惊讶(我经常这样)。
(我假设您关心的是性能。)
一辆
如果没有看到你的结构,就很难明确地说出任何东西。但我怀疑你应该把它作为一个结构。
通常,当存储两个以上的相关数据时,我喜欢创建一个将它们绑定在一起的类。尤其是当我将他们作为一个整体传递的时候。