C# 基本操作的表现

标签 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 更好的计算时间间隔的方法

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

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

最佳答案

回答您的问题 3 -

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

使用 System.Diagnostics.Stopwatch 测量时间差,因为它具有非常高的精度。

关于C# 基本操作的表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19289653/

相关文章:

selenium - 使用 selenium webdriver 预先记录的步骤进行性能/负载测试

wcf - 使用 JMeter 对 WCF Web 服务进行性能测试?

php - PHP不就是这样优化的吗?它是自上而下的解释语言吗?

c# - ToLookup() 如何使用多个索引?

java - 从可配置的 JAR 运行 JMeter

c# - 如何编译使用不安全代码的解决方案?

c# - 终止 TabletKeyboard(TabTip.exe) 应用程序的进程后,在 wpf 中不会恢复到其原始大小

java - 加载类总数不断增加

c# - 在 C# 中调整 ComboBox DropDown 宽度

c# - 动态数据展示(D3)——生成多图