性能比较_取数字中的一位

看到别人代码忍不住想喷,又觉得没有数据支持喷得没有力度,于是就测了一下

从一个两位数以上的数字中取出十位的值:

    void Start()
    {
        float[] nums = new float[10000000];
        for(int i=0;i<10000000;++i)
        {
            nums[i]= UnityEngine.Random.Range(10, 300);
        }

        int startTime = Environment.TickCount;
        foreach(float speed in nums)
        {
            string str = speed.ToString("0");
            float n= float.Parse(str.Substring(str.Length - 2, 1));
        }
        print(Environment.TickCount - startTime);

        startTime = Environment.TickCount;
        foreach (float speed in nums)
        {
            int n = (int)speed % 10;
            n = n / 10;
        }
        print(Environment.TickCount - startTime);
    }

输出:
23250
47
第二种方法体中加上代码string str = speed.ToString("0");后输出约16000
可以看到,性能相差约500倍

直观一点来看:

设游戏以60帧运行,一帧时间是16ms,使用第一种算法在一帧中可以执行7168次,而第二种算法一帧中可以执行300多万次。

注:
  • 以上结果在Intel十代i5移动CPU下测得,主频2.5GHz
  • 代码为Unity引擎下C#编写
posted @ 2021-05-21 22:02  玩家剑小鱼  阅读(57)  评论(0编辑  收藏  举报