Vb.net 为什么循环在迭代次数最少时显示低迭代率

Vb.net 为什么循环在迭代次数最少时显示低迭代率,vb.net,loops,Vb.net,Loops,在用Do做一些实验时,直到。。循环我注意到迭代的速度随着迭代的次数而变化。考虑下面的代码和计算: Dim tim As Double Dim i As Integer = 0 tim = Now.Millisecond Do Until i > 500 ListBox1.Items.Add(i.ToString) i = i + 1 Loop MsgBox(Now.Millisecond - tim) 计数、执行时间和费率如下所述: ╔══════════════════════════

在用Do做一些实验时,直到。。循环我注意到迭代的速度随着迭代的次数而变化。考虑下面的代码和计算:

Dim tim As Double
Dim i As Integer = 0
tim = Now.Millisecond
Do Until i > 500
ListBox1.Items.Add(i.ToString)
i = i + 1
Loop
MsgBox(Now.Millisecond - tim)
计数、执行时间和费率如下所述:

╔═════════════════════════════════════════════════════════════════════════════════╗
║     Count       Time Taken(Ms)        Rate(iterations/Ms)                       ║
╠═════════════════════════════════════════════════════════════════════════════════╣
║       2             1                      0.5                                  ║
║       10            2                      0.2                                  ║
║       25            3                      0.12                                 ║
║       50            7                      0.14                                 ║
║      100           18                      0.18                                 ║
║      250           46                      0.184                                ║
║      500           82                      0.164                                ║
╚═════════════════════════════════════════════════════════════════════════════════╝
有人知道这种时间上的变化吗

影响迭代速度的因素有哪些?
对我来说似乎是线性的。我在y轴上绘制了你的时间,在x轴上绘制了你的循环迭代次数,结果与我预期的相当线性。R^2值为0.996相当不错。因此,根据这条趋势线,无论迭代次数多少,你都有大约0.352秒的开销,然后每次迭代上升0.167秒。显然,这些数字并不完美,但它们确实显示了一个初始的开销,然后是一个稳定的上升,而不是你认为你看到的变化


考虑到处理器工作在纳秒级,一毫秒不能提供足够的时间分辨率来分析代码。Furthemore DateTime.Now.millizes实际上并不精确到1毫秒,如果您需要这种精度,应该使用秒表

最后,使用较小的列表大小并不能代表吞吐量,因为您没有考虑JIT优化所需的时间以及执行垃圾收集时所有线程如何阻塞


这并不是要让您气馁,但我建议您仔细阅读软件评测的原则,以便了解如何准确地度量代码的性能。

迭代速度对我来说似乎是恒定的