这个 XNA方法有两个矩阵相乘有什么好处吗?
public static void Multiply (
ref Matrix matrix1,
ref Matrix matrix2,
out Matrix result
)
Run Code Online (Sandbox Code Playgroud)
为什么结果是out参数而不是返回?使用简单的返回值是否有任何速度或内存优势?考虑到Matrix是一个结构,这与它有什么关系吗?我可以理解为什么matrix1和matrix2是ref变量,所以它不必复制它们,但我不明白为什么第三个是out参数而不是return或ref变量.
是的,一个重要的.Matrix类型违反了.NET编程的一个指导原则,结构不应大于16个字节.通常是4个int字段.Matrix有16个浮点字段,总共64个字节.
16字节建议与传递给生成的机器代码中的方法或从生成的机器代码中的方法传递的方式相关.即使是x86核心,特别是缺乏CPU寄存器的核心,也有足够的寄存器允许将结构存储在CPU寄存器而不是堆栈帧中.但是,如果它不适合,那么结构将通过堆栈框架.并且在呼叫和接收时都被复制.这太贵了.同样适用于返回值.
此费用的解决方法是通过ref或out传递结构值.就像Multiply方法一样.现在它只需要一个指向结构的指针,在32位内核上传递4个字节.每次代码使用结构字段时都必须取消引用指针的开销.哪个好,这也是类对象所需要的.
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |