性能比较_取数字中的一位
看到别人代码忍不住想喷,又觉得没有数据支持喷得没有力度,于是就测了一下
从一个两位数以上的数字中取出十位的值:
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#编写