我有一种我认为将其用作结构的类型。
- 它代表单个值
- 它是不可变的
但问题是,它有 6 个 int 字段。
那么我应该为这种类型使用哪种解决方案?
- 继续使用结构?
- 换班?
- 或者将 6 个整数打包成一个 int 数组,所以它只有一个字段
编辑
具有 6 个整数字段的结构的大小为 24 字节,这对于传递来说是巨大的。struct 的推荐大小不超过 16 字节
我有一种我认为将其用作结构的类型。
但问题是,它有 6 个 int 字段。
那么我应该为这种类型使用哪种解决方案?
编辑
具有 6 个整数字段的结构的大小为 24 字节,这对于传递来说是巨大的。struct 的推荐大小不超过 16 字节
这取决于您将如何使用它?
仅从您在问题中提供的信息很难回答。
小心拳击。如果您的结构将被需要一个对象的方法所使用,它将被强制转换为一个对象,并且您将受到潜在的性能影响。
这是一个更详细地解释它的参考。
我会把它变成一门课(#2),然后你就不用担心了。
使用六个整数的数组(#3)可能会使您的代码更难阅读。每个 int 都有描述性标识符的类会好得多。
没有看到你的结构,很难明确地说出任何东西。但我怀疑你应该把它作为一个结构。
怎么样WriteOnce<int[]>
?
我建议编写一个小基准来衡量不同选项的性能,这是确定的唯一方法。你可能会对结果感到惊讶(我经常这样)。
(我假设您在这里关心的是性能。)
如果数据持有者将是不可变的,那么结构与类的问题很可能取决于每个实例存在的平均引用数。如果有一个 TwentyFourByteStruct[1000] 数组,则该数组将占用 24,000 个字节,无论每个元素是否具有不同的值、所有元素是否具有相同的值或介于两者之间。如果有一个 TwentyFourByteClass[1000] 数组,则该数组将占用 4,000 或 8,000 个字节(对于 32/64 位系统),并且创建的每个不同的 TwentyFourByteClass 实例将占用大约 48 个字节。如果所有数组元素碰巧持有对同一个 TwentyFourByteClass 对象的引用,那么总数将是 4,048 或 8,048 字节。如果所有数组元素都包含对不同 TwentyFourByteClass 对象的引用,则总数将为 52,000 或 56,000 字节。
至于运行时性能,您可以获得的最佳性能通常是通过引用传递结构。通过值传递结构将需要复制它们,这对于大于 16 字节的结构可能会变得昂贵(.net 包括对 16 字节或更小的结构的优化),但是通过引用的值类型的成本是相同的,无论是 1 字节还是16,000 字节。
一般来说,当存储多于两条相关数据时,我喜欢创建一个将它们绑定在一起的类。特别是如果我将它们作为一个单元传递。