神奇的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();
结果,也是同样的神奇,相差甚大:
对于这个问题,我也是摸不着头脑,谁知道原理的请告知一下,先记录下来,找资料去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述