c# - Unity / RIDER:乘法运算的顺序效率低下?
问题描述
骑手 IDE 通知我以下内容效率低下
transform.Translate(moveDirection * speed * Time.smoothDeltaTime);
并想将其重写为
transform.Translate(Time.smoothDeltaTime * speed * moveDirection);
有人知道为什么吗?
都是乘法,有什么区别?
在某些情况下,这里是 speed 和 moveDirection 的值
private Vector3 moveDirection = Vector3.left;
private float speed = 2.5f;
我有点困惑为什么它更好?
任何人都可以帮忙吗?
谢谢
解决方案
Vector3 有 3 个组件。X、Y 和 Z。
将 Vector3 乘以一个值会将分量乘以该值。
由于向量旁边有 2 个值,因此顺序与结果无关,但对操作数很重要。
这是因为向量优先将导致 3+3=6 次乘法:
- X*=速度
- Y*=速度
- Z*=速度
- X*=时间
- Y*=时间
- Z*=时间
而 vector-last 将是 1+3=4 次乘法:
- 规模=速度*时间
- X*=比例
- Y*=比例
- Z*=比例
无论哪种方式,这只是 Rider 对性能的偏执,而这种优化水平虽然总是受欢迎的,但在大多数情况下绝对不需要。
推荐阅读
- react-native - 分享扩展反应原生 - 博览会
- php - 我可以更改 Yoast 在 WordPress 网站中生成的描述元标记的内容吗?
- opencv - imshow 似乎显示了错误的图像(不重复)
- go - 安装和使用 godef
- asp.net - 在不丢失格式的情况下编辑现有的 excel 文件 ASP.Net
- unity3d - 在 Unity 中使用 API 创建 ShoppingCart
- django - ModelChoiceField 小部件属性无效
- python - 如果你 send() 到 Python 中的生成器 *expression* 会发生什么?
- corda - 我可以在不同的机器上运行 Demobench 还是只在本地运行?
- arrays - VBA将单元格分配为数组公式