Fin*_*las 0 .net c# performance
我有一个算法,我正在使用System.Diagonstics来计时 - 通过秒表.
它工作得很好但我注意到的一件事是我第一次运行算法需要大约52毫秒,这很棒.
第二次运行算法时,它只需要一小部分时间.
这是由于.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
Run Code Online (Sandbox Code Playgroud)
在我的跑步者中调用这两种方法后,我得到秒表并检查时间.
算法
该算法是计算机控制的AI对偶的战术航路点推理.我试图在上面的例子中尽可能简单.
结果
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
...
Run Code Online (Sandbox Code Playgroud)
我应该在第一次运行算法时忽略它吗?否则,我最终得到的平均值与第一次运行时的值基本相同.
如果你的时间只有52毫秒,那么任何事情都可能发生 - 这是一个非常短的时间来衡量.
例如,很可能是由于JIT编译方法及其触及的所有内容.
通常,为了获得有用的测量结果,您应该多次迭代以获得更长的时间 - 这可以减少由于(例如)操作系统中的某些其他事件导致CPU短暂消失而产生的噪声.