我试图实现简单的软件3D引擎。所以我需要一个矩阵4x4来表示变换。我的矩阵的每个单元格类型都是System.Double格式,这意味着整个矩阵将使用8个字节* 16个单元格= 128个字节。目前我已将此作为一个类实现。此矩阵也是不可变类型
所以现在,当我试图通过这个矩阵乘以向量时,我做了类似这样的事情:matrix.m11 * vector.X(etc ...)。我认为,要访问字段m11,程序首先需要获得' matrix'参考值,然后检查它为null,然后找到m11值,是吗?如果我将类更改为struct,我的乘法会变得更快?我知道128字节结构很大,但如果我编写只使用ref / out keyowrds的方法?这将是很好的选择?
正如我在SharpDX库中看到的,矩阵是一个结构。我应该将类更改为struct然后提高性能吗?
答案 0 :(得分:15)
出于以下原因,我不建议使用类来存储3D引擎的double4x4矩阵:
fixed
指令。它也适用于与其他库互操作(物理引擎需要一个float4x4结构,而不是一个对象实例)另一方面,如果你关心表现:
ref
传递矩阵,而不是通过副本传递所有矩阵计算。