首页 文章

结构的最佳解决方案,超过16个字节

提问于
浏览
3

我有一种我认为用它作为结构的类型 .

  • 它代表单一值

  • 这是不可改变的

但问题是,它有6个int字段 .

那么我应该为这种类型使用哪种解决方案?

  • 继续使用struct?

  • 改为上课?

  • 或将6个整数打包成int数组,因此它只有一个字段

EDIT

具有6个整数字段的struct的大小是24个字节,这是很难传递的 . struct的推荐大小不超过16个字节

7 回答

  • 0

    我建议写一个小基准来衡量不同选项的性能,这是确定的唯一方法 . 你可能会对结果感到惊讶(我经常这样) .

    (我假设你关注的是性能 . )

  • 1

    这取决于你将如何使用它?

    • 你打算分配很多而不是传递它吗?

    • 是否会被第三方代码消耗?在这种情况下,类通常会为您提供更大的灵活性 .

    • 你想要结构与类的语义吗?例如,不可空?

    • 您是否可以从此类的一些预先创建的实例中获益,这些实例可以重复使用以表示特殊情况?与String.Empty类似 . 在这种情况下,您将从课程中受益 .

    很难从您在问题中提供的信息中回答 .

  • 0

    小心拳击 . 如果你的结构将由一个需要一个Object的方法使用,那么它将被强制转换为一个对象,你将有潜在的性能损失 .

    这是reference,它更详细地解释了它 .

    我会把它变成一个 class (#2)然后你就不用担心了 .

    使用六个整数(#3)的数组可能会使您的代码更难阅读 . 每个int都有一个描述性标识符的类会好得多 .

  • -1

    如果没有看到你的结构,就很难明确地说出任何结论 . 但我怀疑你应该把它留作结构 .

  • 5

    WriteOnce<int[]> 怎么样?

  • 0

    如果数据持有者将是不可变的,那么struct-versus-class问题很可能取决于每个实例存在的平均引用数 . 如果有一个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字节还是1字节,通过引用的值类型的成本都相同16,000字节 .

  • 0

    通常,当存储两个以上的相关数据时,我喜欢创建一个将它们绑定在一起的类 . 特别是如果我将他们作为一个单位传递 .

相关问题