C# 在C语言中,哪一个性能更好

C# 在C语言中,哪一个性能更好,c#,unity3d,C#,Unity3d,我很困惑何时使用开关来获得更好的性能。 这是我想比较的代码。 我想问你哪一个更好,因为我在50对象中使用这个脚本 void FixedUpdate() { tabrakan(); } void tabrakan() { switch (ayam) { case 0: if(perubahan == 0) {

我很困惑何时使用开关来获得更好的性能。 这是我想比较的代码。 我想问你哪一个更好,因为我在50对象中使用这个脚本

 void FixedUpdate()
    {
        tabrakan();
    }

    void tabrakan()
    {
        switch (ayam)
        {
            case 0:
                if(perubahan == 0)
                {
                    transform.Translate(userDirection2 * movespeed * Time.fixedDeltaTime);
                }
                break;
            case 1:
                if(perubahan == 0)
                {
                    transform.Translate(userDirection * movespeed * Time.fixedDeltaTime);
                }
                break;
        }

    }
vs


哪一个更好?

最终,从性能的角度来看,这在99.9%的代码中并不重要,除非这是一个紧密的循环,而且所有其他东西都非常便宜。坦率地说,停止尝试微观优化,而是担心正确性,直到您有性能数据表明这是一个问题,基于真实的评测或基准测试

有趣的是,在许多情况下,切换稍微快一些,因为它是一个单跳而不是多个测试分支和跳,然而,这就像说:

如果我从纽约开车到波士顿,当我到达我要去的大楼时,哪个门会更快


没关系,这不是花时间的地方。

Unity有一个分析器,不是吗?比赛你的马。然而,这种差异可以忽略不计。担心其他事情我看不出有什么区别这就是为什么im askingSwitch在某些情况下会更好,因为它在表上工作,虽然可能不是这种情况,但这取决于编译器如何实现。如果你看不出有什么不同,那么你就没有问题了。。。选择您的收藏夹switch语句通常比嵌套if语句编译器创建跳转表的效率更高,但正如Marc所述,差异非常小,最终您应该担心可读性。如果你的代码很慢,那不是因为你使用了If链而不是开关——如果你担心代码太快,检查你使用的算法以及它们的平均情况/最坏情况运行时间——这将是提高性能的更好方法
   void FixedUpdate()
    {
        tabrakan();
    }

    void tabrakan()
    {
      if (ayam == 0 && perubahan == 0)
        {
            transform.Translate(userDirection2 * movespeed * Time.fixedDeltaTime);
        }
        else if (ayam == 1 && perubahan == 0)
        {
            transform.Translate(userDirection * movespeed * Time.fixedDeltaTime);
        }
    }