C# 超过16字节的结构的最佳解决方案 我有一个类型,我认为它是结构。< /P> 它代表单个值 它是不变的

C# 超过16字节的结构的最佳解决方案 我有一个类型,我认为它是结构。< /P> 它代表单个值 它是不变的,c#,optimization,class,struct,C#,Optimization,Class,Struct,但问题是,它有6个int字段 那么对于这种类型,我应该使用哪种解决方案呢 继续使用struct 换班 或者将6个整数打包到int数组中,使其只有一个字段 编辑 包含6个整型字段的结构的大小是24字节,这对于传递来说是巨大的。 结构的建议大小不超过16个字节如果看不到结构,很难说清楚。但是我想你应该把它作为一个结构来处理。写一个如何?这取决于你打算如何使用它 你打算分配大量的信息还是大量地传递信息 它会被第三方代码使用吗?在这种情况下,类通常为您提供更大的灵活性 你想要结构还是类语义?例如,不可为

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

那么对于这种类型,我应该使用哪种解决方案呢

  • 继续使用struct
  • 换班
  • 或者将6个整数打包到int数组中,使其只有一个字段
  • 编辑

    包含6个整型字段的结构的大小是24字节,这对于传递来说是巨大的。
    结构的建议大小不超过16个字节

    如果看不到结构,很难说清楚。但是我想你应该把它作为一个结构来处理。

    写一个
    如何?

    这取决于你打算如何使用它

  • 你打算分配大量的信息还是大量地传递信息
  • 它会被第三方代码使用吗?在这种情况下,类通常为您提供更大的灵活性
  • 你想要结构还是类语义?例如,不可为空
  • 有几个预先创建的此类实例可以重用以表示特殊情况,您会从中受益吗?类似于String.Empty。在这种情况下,您将受益于一个类

  • 仅凭你在问题中提供的信息很难回答。

    小心拳击。如果您的结构将被一个需要对象的方法使用,它将被强制为一个对象,并且您将受到潜在的性能影响

    这里有一个更详细的解释

    我会让它成为一门课,这样你就不用担心了


    使用六个整数(#3)的数组可能会使代码更难阅读。对于每个int使用描述性标识符的类会更好。

    一般来说,当存储两个以上的相关数据时,我喜欢创建一个将它们绑定在一起的类。特别是如果我将它们作为一个单元来传递。

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


    (我假设您关心的是性能。)

    如果数据持有者是不可变的,那么结构与类的问题很可能取决于每个实例的平均引用数。如果有一个数组是TwentyFourByTestStruct[1000],那么该数组将占用24000字节,不管每个元素是否持有不同的值,所有元素是否持有相同的值,或者介于两者之间。如果一个数组是TwentyFourByteClass[1000],那么该数组将占用4000或8000字节(对于32/64位系统),并且创建的TwentyFourByteClass的每个不同实例将占用大约48字节。如果所有数组元素恰好包含对同一TwentyFourByteClass对象的引用,那么总数将为4048或8048字节。如果所有数组元素都包含对不同TwentyFourByteClass对象的引用,那么总数将为52000或56000字节


    至于运行时性能,您可以获得的最佳性能通常是通过引用传递结构。按值传递结构将需要复制它们,这对于大于16字节的结构可能会很昂贵(.net包括对16字节或更小结构的优化),但是引用值类型的成本是相同的,无论是1字节还是16000字节。

    请提供一些额外的细节。如果您能在问题中包括为什么6个int字段是一个问题,这将对未来的读者有用。也许这是C#用户的常识,但对我来说并不明显。@Software Monkey:这是一个三角形。字段是sideA,sideB,sideC,size,seed1,seed2。@slim:谢谢。我已经编辑了我的问题。请原谅我的C语言背景和C语言知识的缺乏,但你不是通过引用来给出答案的吗?我想你已经错过了问题的重点——这不是是否将它们放在一起的问题,而是是否使用结构或类的问题。@Dmitri Nesteruk:你能解释一下吗?1。传递很多信息2。不会被第三方代码3使用。四号。在我看来,上课可能是你的正确选择。这主要基于您对问题1和问题3的回答。