Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向量2:类还是结构?_C#_Unity3d - Fatal编程技术网

C# 向量2:类还是结构?

C# 向量2:类还是结构?,c#,unity3d,C#,Unity3d,我想要一个简单的Vector2类/结构,带有float x和y以及一些方法。 我仍在试图理解这些差异,但还不能完全理解 我知道这通常是用结构完成的,但我想每帧更新一个向量2的大2D数组,这会使类比结构更好吗? 顺便说一句,请先在这里发帖,谢谢您提前回复 这会使类比结构更好吗 对于这一行动,具体而言,两者都不是更好或更差;然而,拥有大量长寿命对象意味着您可能会遇到GC故障。事实上,它是一个“大型2D数组”,这意味着您还可以通过使用结构潜在地节省大量开销(对象头) 这会使类比结构更好吗 对于这一行动

我想要一个简单的Vector2类/结构,带有float x和y以及一些方法。 我仍在试图理解这些差异,但还不能完全理解 我知道这通常是用结构完成的,但我想每帧更新一个向量2的大2D数组,这会使类比结构更好吗? 顺便说一句,请先在这里发帖,谢谢您提前回复

这会使类比结构更好吗

对于这一行动,具体而言,两者都不是更好或更差;然而,拥有大量长寿命对象意味着您可能会遇到GC故障。事实上,它是一个“大型2D数组”,这意味着您还可以通过使用结构潜在地节省大量开销(对象头)

这会使类比结构更好吗


对于这一行动,具体而言,两者都不是更好或更差;然而,拥有大量长寿命对象意味着您可能会遇到GC故障。事实上,它是一个“大2D数组”,这意味着您还可以通过使用结构来潜在地节省大量开销(对象标题)。

我投票选择结构我不明白的是,您为您的问题提供了Unity3D标记。引擎中已经有一个Vector2/3/4结构,因此无需创建自己的结构。我认为不断更新会使类比结构更好,因此我应该创建一个新的Vector2 classI投票结构。我不明白的是,您为您的问题提供了Unity3D标记。引擎中已经有一个Vector2/3/4结构,因此不需要创建自己的。我认为不断更新使类比结构更好,因此我应该创建一个新的Vector2类亲爱的先生!通过使用结构,您还可以潜在地节省大量开销(对象头)。这对我来说太多了,无法消化。你能再解释一下吗?这对我来说也太难消化了,但在谷歌搜索之后,我有了一个想法。如果我理解正确的话,垃圾收集结构是否比收集基元类型更昂贵?这会使GC更容易使用2个浮点数组吗?但这难道不会使管理费用增加一倍吗?我应该喜欢哪一个?他们还说不要使用结构,除非它是不可变的。更新每一帧不都被认为是“可变的”吗?谢谢你的支持reply@UmairM
类的每个实例都是一个对象。在堆上为对象分配空间,该堆由一个对象头加上实际数据组成。值类型是作为其他内容的一部分分配的,并且没有对象头-该类型是通过拥有它的对象暗示的。对于数组,类型由数组的类型暗示。当您有数千或数百万小块数据时,这种差异就开始累积。要添加到这个答案中的一个非常重要的事情是,
结构
是通过
传递的,而不是
引用
。如果要将包含网格信息和网格uv坐标等数据的重
结构传递给另一个函数,请使用
ref
关键字。尤其是在团结中这样做,否则当事情进展缓慢时,你会感到疑惑。对于
@Programmer有趣的事实:引用类型(类)在默认情况下也是“passbyva”;棘手的是,您传递的(通过值)是一个引用。参考资料也可以“按参考资料传递”。亲爱的先生!通过使用结构,您还可以潜在地节省大量开销(对象头)。这对我来说太多了,无法消化。你能再解释一下吗?这对我来说也太难消化了,但在谷歌搜索之后,我有了一个想法。如果我理解正确的话,垃圾收集结构是否比收集基元类型更昂贵?这会使GC更容易使用2个浮点数组吗?但这难道不会使管理费用增加一倍吗?我应该喜欢哪一个?他们还说不要使用结构,除非它是不可变的。更新每一帧不都被认为是“可变的”吗?谢谢你的支持reply@UmairM
类的每个实例都是一个对象。在堆上为对象分配空间,该堆由一个对象头加上实际数据组成。值类型是作为其他内容的一部分分配的,并且没有对象头-该类型是通过拥有它的对象暗示的。对于数组,类型由数组的类型暗示。当您有数千或数百万小块数据时,这种差异就开始累积。要添加到这个答案中的一个非常重要的事情是,
结构
是通过
传递的,而不是
引用
。如果要将包含网格信息和网格uv坐标等数据的重
结构传递给另一个函数,请使用
ref
关键字。尤其是在团结中这样做,否则当事情进展缓慢时,你会感到疑惑。对于
@Programmer有趣的事实:引用类型(类)在默认情况下也是“passbyva”;棘手的是,您传递的(通过值)是一个引用。引用也可以“通过引用传递”。