• 神奇的for循环,让你的for循环执行100w + 1比100w次快200w倍


      最近在研究利用api模拟键盘鼠标的动作,类似于按键精灵,然后发现只要是标签存储的值,都没办法用api抓取窗体句柄。于是乎便有了操作内存取值的想法,这就用到了另外一个api了。

      因为内存寻值,有一个区间段,我们设定的是从0x00400000到0x7FFFFFFF(这些值是根据CE的区间得来的),然而如果利用for循环去遍历,代码如下:

    1 Stopwatch watch = new Stopwatch();
    2 watch.Start();
    3 int start = 0x00400000, end = 0x7FFFFFFF;
    4 for (int i = start; i < end; i++)
    5 {
    6
    7 }
    8 watch.Stop();
    9 Console.WriteLine("耗时:" + watch.Elapsed);

      结果为:

      然而当我们在for循环中加入一个 + 1时,就出现了神奇的效果,代码如下:

    1 Stopwatch watch = new Stopwatch();
    2 watch.Start();
    3 int start = 0x00400000, end = 0x7FFFFFFF;
    4 for (int i = start; i < end + 1; i++)
    5 {
    6
    7 }
    8 watch.Stop();
    9 Console.WriteLine("耗时:" + watch.Elapsed);

      结果为:

      让人震惊的效果,相差实在太大了,于是我又做了其他的测试,代码如下:

     1 int times = 1000000;
    2 Stopwatch watch1 = new Stopwatch();
    3 watch1.Start();
    4 for (int i = 0; i < times; i++)
    5 {
    6 }
    7 watch1.Stop();
    8 Console.WriteLine(watch1.Elapsed + string.Format("(执行{0}次所需要的时间)", times));
    9
    10 Stopwatch watch2 = new Stopwatch();
    11 watch1.Start();
    12 for (int i = 0; i < times + 1; i++)
    13 {
    14 }
    15 watch1.Stop();
    16 Console.WriteLine(watch2.Elapsed + string.Format("(执行{0} + 1次所需要的时间)", times));
    17
    18 times = int.MaxValue;
    19 Stopwatch watch3 = new Stopwatch();
    20 watch3.Start();
    21 for (int i = 0; i < times; i++)
    22 {
    23 }
    24 watch3.Stop();
    25 Console.WriteLine(watch3.Elapsed + string.Format("(执行{0}次所需要的时间)", times));
    26
    27 Stopwatch watch4 = new Stopwatch();
    28 watch4.Start();
    29 for (int i = 0; i < times + 1; i++)
    30 {
    31 }
    32 watch4.Stop();
    33 Console.WriteLine(watch4.Elapsed + string.Format("(执行{0} + 1次所需要的时间)", times));
    34 Console.ReadKey();

      结果,也是同样的神奇,相差甚大:


      对于这个问题,我也是摸不着头脑,谁知道原理的请告知一下,先记录下来,找资料去。

  • 相关阅读:
    内联汇编的使用
    metamask注记词
    一个简单的增删改查合约
    企业邮箱账号
    压缩包管理
    设计模式
    软硬链接ln
    文件IO-Linux
    静态库和动态库
    gdb调试
  • 原文地址:https://www.cnblogs.com/ahl5esoft/p/2252585.html
Copyright © 2020-2023  润新知