我使用以下代码:
MainLoop() {
for (int i = 0; i < length; i++) {
XMVector3Rotate(rays[i], orientation);
}
}
并且我有fps 1900000,但是当我使用这一帧时:
MainLoop() {
for (int i = 0; i < length; i++) {
calculatedRays[i] = XMVector3Rotate(rays[i], orientation);
}
}
我的fps = 200。
为什么?
最佳答案
执行此操作时:
XMVector3Rotate(rays[i], orientation);
我猜编译器会内联函数-并且看到它,因为它的结果永远不会在任何地方赋值-实际上它什么也没做,并且完全删除了函数调用。这是非常快的,因为它实际上没有做任何事情。
但是,当您添加作业时:
calculatedRays[i] = XMVector3Rotate(rays[i], orientation);
突然之间,您正在进行大量的内存读取和写入以及各种数学运算-所有这些以前都被跳过了。
(您已经标记了此XNA,但这是C ++函数。大多数C ++编译器可以并且将内联这样的函数。标准C#编译器不能。)