这是一个创建于 405 天前的主题,其中的信息可能已经有所发展或是发生改变。
coding 中经常遇到一种情况。对一个变量赋值,是直接赋值,还是判断之后再赋值。 体现在代码上,大概是下面这种情况( i 和 num 都是 int ): if (i > 0) num = i; 或者 num = i; 我的疑问是到底哪个更快,自己用 C#做了测试:在循环一亿次的情况下,直接赋值速度更快。但是判断赋值会有部分是执行了 if 中的代码的,所以会导致了实验不纯粹。
然后我又用下面的代码测试了下,单纯的对比赋值和比较的效率
static void Main(string[] args) { int num; Console.WriteLine(DateTime.Now.ToString("mm:ss.fff")); for (int i = 0; i < 100000000; i++) { if (i > 1000) { //num = int.MaxValue; } } Console.WriteLine(DateTime.Now.ToString("mm:ss.fff")); Console.WriteLine("---"); Console.WriteLine(DateTime.Now.ToString("mm:ss.fff")); for (int i = 0; i < 100000000; i++) {
num = int.MaxValue; } Console.WriteLine(DateTime.Now.ToString("mm:ss.fff")); Console.ReadLine(); }
结果发现还是直接赋值更快,在我本机上,判断执行一亿次速度是 226ms,赋值执行一亿次速度是 168ms。(大家也可以自己去 https://try.dot.net/试试)
最后从结果上来看,在整型的情况下,赋值是会比判断快的。
但是问题就来了,为什么呢? 我自己脑洞了一个答案,赋值到中间语言的时候就是 mov,比较到中间语言的时候是 cmp,mov 就直接把 01 丢到变量里去就可以了;但是 cmp 的话就要做减法,要做借位啊这那的操作,所以是赋值会更快。
强行解释了一波,感觉不是很信服。所以还请大家集思广益,破除疑惑~