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 的话就要做减法,要做借位啊这那的操作,所以是赋值会更快。
强行解释了一波,感觉不是很信服。所以还请大家集思广益,破除疑惑~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.