C#基本操作的表现

时间:2013-10-10 07:30:51

标签: c# performance-testing

我找到了几篇文章(包括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个问题:

  1. 为什么第一个循环比第一个循环中的其余循环花费的时间更长?
  2. 为什么在第二个例子中所有循环都需要大约相同的时间?
  3. 有没有比Datetime
  4. 更好的计算时间间隔的方法

    个人POV: 程序开始运行时需要初始化一些东西。通过添加一个额外的命令(a = 0),我给程序时间进行初始化。

    POV中的缺陷: 当我将循环次数从10 ^ 8更改为10 ^ 9时,time1和time2之间的差异应再次为~0.015s(如果我的POV有效)。但现在又是~0.15s(意味着再次~5%)。如果我添加第二个a=0,那么再次time1~time2~time3~time4

1 个答案:

答案 0 :(得分:3)

回答你的问题3 -

有没有比Datetime更好的计算时间间隔的方法?

使用 System.Diagnostics.Stopwatch 来测量时差,因为它可以提供非常高的精确度。