找了几篇文章(包括SA中的一些问题),试图找出基本操作的成本。
但是,我尝试制作自己的小程序,以便自己测试。在尝试测试加法和减法时,我遇到了一些事情,我用简单的代码向您展示
int a,i,j;
DateTime d1,d2;
a = 0;
d1= DateTime.Now;
for (i = 1; i <= 10000; i++)
for (j = 1; j <= 10000; j++)
a = a + 1;
d2=DateTime.Now;
Console.WriteLine("a=a+1\t1E8\t"+(d2-d1));
a = 0;
d1 = DateTime.Now;
for (i = 1; i <= 10000; i++)
for (j = 1; j <= 10000; j++)
a = a + 1;
d2 = DateTime.Now;
Console.WriteLine("a=a+1\t1E8\t" + (d2 - d1));
a = 0;
d1 = DateTime.Now;
for (i = 1; i <= 10000; i++)
for (j = 1; j <= 10000; j++)
a = a + 1;
d2 = DateTime.Now;
Console.WriteLine("a=a+1\t1E8\t" + (d2 - d1));
a = 0;
d1 = DateTime.Now;
for (i = 1; i <= 10000; i++)
for (j = 1; j <= 10000; j++)
a = a + 1;
d2 = DateTime.Now;
Console.WriteLine("a=a+1\t1E8\t" + (d2 - d1));
Console.ReadKey();
首先我声明了一些变量,然后我执行了 4 次相同的任务。每次我都做同样的事情。总是,结果如下:
a=a+1 1E8 00:00:00.2300230
a=a+1 1E8 00:00:00.2180218
a=a+1 1E8 00:00:00.2130213
a=a+1 1E8 00:00:00.2150215
或者
a=a+1 1E8 00:00:00.2340000
a=a+1 1E8 00:00:00.2170000
a=a+1 1E8 00:00:00.2130000
a=a+1 1E8 00:00:00.2100000
这意味着第一次计算总是需要更长的时间(大约长 5%)。所有其他时间,时间大致相同。
然后我只是a=0;
在第一行之后添加行a=0;
。结果如下:
a=a+1 1E8 00:00:00.2210000
a=a+1 1E8 00:00:00.2170000
a=a+1 1E8 00:00:00.2200000
a=a+1 1E8 00:00:00.2170000
甚至
a=a+1 1E8 00:00:00.2160000
a=a+1 1E8 00:00:00.2160000
a=a+1 1E8 00:00:00.2200000
a=a+1 1E8 00:00:00.2230000
所以3个问题:
- 为什么第一个循环比第一个示例中的其余循环花费更长的时间?
- 为什么在第二个示例中所有循环都需要大约相同的时间?
- 有没有比计算时间间隔更好的方法
Datetime
个人 POV:程序开始运行时需要初始化一些东西。通过添加一个额外的命令(a=0),我给程序时间进行初始化。
POV 中的缺陷:当我将循环数从 10^8 更改为 10^9 时,time1 和 time2 之间的差异应该再次为 ~0.015s(如果我的 POV 有效)。但现在又是~0.15s(再次意味着~5%)。如果我添加第二个a=0
,那么再次 time1~time2~time3~time4