代码之家  ›  专栏  ›  技术社区  ›  Finglas

为一组方法计时—第二次运行它们时,它们会更快

  •  0
  • Finglas  · 技术社区  · 15 年前

    我有一个我正在使用的算法 系统诊断学 时间-通过

    我第二次运行这个算法时,只花了一小部分时间。

    .NET

     Algorithm class
    
     Stopwatch get/set
    
     Method A
         Start stopwatch
         // Do work.
         Stop stopwatch
     End
    
     Method B
         Start stopwatch
         // Do work.
         Stop stopwatch
     End
    
    End
    

    在我的跑步者中调用这两种方法后,我得到秒表并检查时间。

    算法

    结果

    19.7847
    0.0443
    0.0102
    0.0159
    0.0091
    0.0073
    0.0079
    0.0079
    0.0079
    0.0079
    0.0079
    0.0079
    0.0136
    0.0079
    0.0073
    0.0079
    0.0079
    0.0079
    0.0079
    0.0073
    ...
    

    我是否应该忽略算法第一次运行时的情况?否则,我将得到一个与第一次运行时的值基本相同的平均值。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Jon Skeet    15 年前

    如果你只计时52毫秒,任何数量的事情都可能发生——这是一个非常小的测量时间。

    一般来说,为了获得有用的度量值,您应该对多次迭代进行计时,以获得更长的周期-这可以减少由于(例如)操作系统中的其他事件导致的噪声,这些事件会短暂地占用CPU。

        2
  •  2
  •   Mark Bertenshaw    15 年前

        3
  •  1
  •   spender    15 年前

    第一次运行CLR字节码时,必须对其进行JIT处理,这会产生开销。后续执行不会产生此成本。