美文网首页
if与赋值的效率比较

if与赋值的效率比较

作者: 藏身草木中 | 来源:发表于2019-05-21 11:03 被阅读0次

    项目中经常会遇到有一个思维上的困扰:是先 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与赋值的效率比较

          本文链接:https://www.haomeiwen.com/subject/aqfdzqtx.html