c# - 哪个性能更高?新运算符与新结构的声明和分配?
问题描述
我正在完成一个关于统一的教程,并遇到了我应该复制到编辑器中的一段代码(选项 1) 我想知道我在选项 2 中使用 new 运算符的性能是否比建议的更高或更低代码。
void Update()
{
Option1();
//or
Option2();
}
private void Option1()
{
Vector2 position = transform.position;
position.x = position.x + 0.1f;
transform.position = position;
}
private void Option2()
{
transform.position = new Vector2(transform.position.x + .1f, transform.position.y);
}
}
解决方案
从技术上讲,在选项 1 中,您正在创建变量 'Vector2 position = transform.position;' 的新实例 这意味着您以与 Option2 相同的方式为信息分配内存空间。
如果我们分解其余代码,您可以将代码视为一系列运算符,每个运算符都是 CPU 进行的跳转/计算。
分解选项1:
private void Option1()
{
// Memory allocation, =, and reference call '.'
Vector2 position = transform.position;
// Reference call, =, reference call, +
position.x = position.x + 0.1f;
// reference call, =
transform.position = position;
}
通过这些让我们说“他们需要相同的处理时间”,所以发生了 9 个动作。
分解选项2:
private void Option2()
{
// Reference call, =, memory allocation, reference call, +, reference call);
transform.position = new Vector2(transform.position.x + .1f, transform.position.y);
}
通过这些让我们说“他们需要相同的处理时间”,所以发生了 6 个动作。
基于将动作概括到同一时间,Option2 将花费 Option1 的 2/3 时间。
注意:对于当今的处理器来说,这是一个微不足道的数字,除非您每帧进行 1,000 次以上的计算,否则这无关紧要。
推荐阅读
- spring - 如何根据偏好为每个用户创建 bean
- sql - oracle 12g 无效号码错误
- list - Haskell 列表中的第二个最小值
- raku - perl6 - 将 Blob 中的数据转换为 Num
- javascript - 在javascript中调用被子类覆盖的父类函数
- c# - UWP 项目可以包含没有打包项目的桌面 exe 吗?
- laravel - 在视图中调用模型中定义的方法。不工作
- xamarin.forms - How to solve parse error while installing an apk?
- android - ListView cannot get height. ImageView image is height uncertain
- wordpress - 来自 wp-admin 的登录作者重定向到主页