不要过度追求精简或者说是优化代码【慎重优化代码】


过度优化代码会以失去高效率为代价得不偿失!


忘记在哪里看到了一个交换两个数值的方法,是采用抑或的方法

即:

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

这样就交换了两个数值型变量的值,

原理是一个数与任意一个给定的值连续异或两次,值不变。

即:a^b^b=a。

接着还有简化代码:

a^=b;

b^=a;

a^=b;

当然还有更简化的:a^=b^=a^=b;

但是我们看一下编译器对这些语句做了什么:

首先是

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

            a = a ^ b;
00000048  mov         eax,dword ptr [ebp-44h]
0000004b  xor         dword ptr [ebp-40h],eax
            b = a ^ b;
0000004e  mov         eax,dword ptr [ebp-40h]
00000051  xor         dword ptr [ebp-44h],eax
            a = a ^ b;
00000054  mov         eax,dword ptr [ebp-44h]
00000057  xor         dword ptr [ebp-40h],eax

再次是

a^=b;

b^=a;

a^=b;

 a ^= b;
0000005a  mov         eax,dword ptr [ebp-44h]
0000005d  xor         dword ptr [ebp-40h],eax

 b ^= a;
00000060  mov         eax,dword ptr [ebp-40h]
00000063  xor         dword ptr [ebp-44h],eax

  a ^= b;
00000066  mov         eax,dword ptr [ebp-44h]
00000069  xor         dword ptr [ebp-40h],eax

最后是

a^=b^=a^=b;

 a ^= b ^= a ^= b;
0000006c  mov         eax,dword ptr [ebp-40h]
0000006f  mov         dword ptr [ebp-48h],eax
00000072  mov         eax,dword ptr [ebp-44h]
00000075  xor         dword ptr [ebp-40h],eax
00000078  mov         eax,dword ptr [ebp-40h]
0000007b  xor         dword ptr [ebp-44h],eax
0000007e  mov         eax,dword ptr [ebp-48h]
00000081  xor         eax,dword ptr [ebp-44h]
00000084  mov         dword ptr [ebp-40h],eax

我们可以看到前两种的效率是一样的,但是最后精简的一条语句;就多了三个mov操作。剩下的不用再说了。

最重要的一点:这个交换值的方法是效率最低的,这不知道是谁想到的小技巧很强,但是登不了大雅之堂。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

最近有点几乎疯狂,在优化代码和框架,让自己很累,

重写了很多代码,规避了很多浪费性能的方法,属性,和流程。

然后在容器启动的时候由原来的几十秒近乎疯狂的达到了1点几秒,

但是项目在运行的时候似乎也没有实质性的飞跃。

昨天睡前随手翻阅的大师的书,大师一句话似乎点醒了我。

1.不要优化代码。

2.(专家)永远不要优化代码。

这句话应该有个前提,那就是你的代码不是十分的糟糕,

在一个就是你没有绝对的把握就不要优化代码。

我们尽量使用底层的代码库,甚至在我们搭建底层代码的时候选用较好的框架和逻辑就已经吧性能考虑进去,

在代码的上层应该尽量保证代码的可读性而不是以为的精简和优化。

这是我这几天的感悟。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

猜你喜欢

转载自www.cnblogs.com/EarlyBridVic/p/12963648.html