if与赋值的效率比较

项目中经常会遇到有一个思维上的困扰:是先 if 再赋值,还是直接赋值呢?

直接赋值在代码上会更加优美,减少了一层判断。但是同时也会好奇,到底哪种做法在效率上更优,这个实现也简单,就动手试了试。

拍脑袋的错误结论:判断效率优于赋值

论证:


判断之后再赋值


耗时229ms


直接赋值


耗时2703ms

满以为是得出结论还是比较快一点,但是一想,不对啊,这个是数组的,相对来说,不是最简单的数据结构,换其他的试试呢。

然后换了其他数据类型试试:(下列数据都是多次实验取的中位数)

int,直接赋值:169ms , 判断赋值:233ms。

string,直接赋值:171ms , 判断赋值:228ms。

bool,直接赋值:206ms , 判断赋值:232ms。

float,直接赋值:175ms , 判断赋值:237ms。

降数据量级到1000000,测试复杂数据类型

Dictionary,直接赋值:94ms , 判断赋值:20ms。

HashTable,直接赋值:115ms , 判断赋值:20ms。

真正结论:在简单数据类型下直接赋值更快。

其实也不难理解,因为复杂数据类型具体内部的操作多所以耗时久,真正在使用中的话,这种量级的差异完全是可以忽略不计的,简单、可读才应该是需要重视的。

Readability counts


附:深入思考了下,其实以上结论都是不全面而有问题的。我们最终需要比较的其实是最终执行的底层操作效率:if 括号内的操作 和 if内的操作。用简单的例子来说明,if (i < 100) { num = 100; },这就是比较 < 100 和 = 100的执行效率,从C#往下一层到中间语言IL(intermidiate language),这个操作就变成了 cmp 和 mov(用学过的汇编做比喻),在往下就成了01的比较了。在01的比较中,因为cmp减法比较是涉及到借位减等复杂操作的,所以自然在效率上是低于直接mov赋值的,就造成了直接赋值比比较快的现象。(个人推断,没有查证)

你可能感兴趣的:(if与赋值的效率比较)