Vb.net 为什么循环在迭代次数最少时显示低迭代率
在用Do做一些实验时,直到。。循环我注意到迭代的速度随着迭代的次数而变化。考虑下面的代码和计算: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) 计数、执行时间和费率如下所述: ╔══════════════════════════
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优化所需的时间以及执行垃圾收集时所有线程如何阻塞
这并不是要让您气馁,但我建议您仔细阅读软件评测的原则,以便了解如何准确地度量代码的性能。迭代速度对我来说似乎是恒定的