Private Sub darts_Click(sender As System.Object, e As System.EventArgs) Handles darts.Click
For i = 0 To 20
MessageBox.Show(i & vbNewLine & i * 2 & vbNewLine & i * 3)
Next
End Sub
或
Private Sub darts2_Click(sender As System.Object, e As System.EventArgs) Handles darts2.Click
For i = 0 To 20
Dim single_score As Integer = 0
Dim double_score As Integer = 0
Dim triple_score As Integer = 0
single_score = i
double_score = i * 2
triple_score = i * 3
MessageBox.Show(single_score & vbNewLine & double_score & vbNewLine & triple_score)
Next
End Sub
两者都明显达到了相同的效果。我写了顶级函数,但我的朋友坚持认为底部是正确的方法。
答案 0 :(得分:1)
在控制台应用中测试它。删除诸如在UI线程上运行的内容,以及在UI控件的事件处理程序中运行。此外,显示消息的行为是巨大的开销,因此请将其留在每个方法中完成。您真正想要测试的是定义变量和分配计算值之间的性能差异,而不是使用少量变量计算内联值。
添加秒表以计算两种方法的时间。
我还添加了一些配置,因此您可以决定要测试的迭代次数以及平均运行次数,以平滑结果。
Dim iterations = Enumerable.Range(1, 16).Select(Function(p) CInt(2 ^ p))
Dim averages = 20
Dim durations As New Dictionary(Of Integer, Dictionary(Of Integer, Double))()
For Each iteration In iterations
Dim d As New Dictionary(Of Integer, Double)()
Dim sw As New System.Diagnostics.Stopwatch()
sw.Start()
For a = 1 To averages
For i = 0 To iteration - 1
Dim s = i & vbNewLine & i * 2 & vbNewLine & i * 3
Next
Next
sw.Stop()
d.Add(1, sw.ElapsedMilliseconds / averages)
sw.Restart()
For a = 1 To averages
For i = 0 To iteration - 1
Dim single_score As Integer = 0
Dim double_score As Integer = 0
Dim triple_score As Integer = 0
single_score = i
double_score = i * 2
triple_score = i * 3
Dim s = single_score & vbNewLine & double_score & vbNewLine & triple_score
Next
Next
sw.Stop()
d.Add(2, sw.ElapsedMilliseconds / averages)
durations.Add(iteration, d)
Next
For Each iteration In iterations
Console.WriteLine("Number of iterations: {0}", iteration)
Console.WriteLine("Method 1: {0:0.0} ms", durations(iteration)(1))
Console.WriteLine("Method 2: {0:0.0} ms", durations(iteration)(2))
Next
Console.ReadLine()
它们几乎相同
迭代次数:2
方法1:0.0毫秒
方法2:0.0毫秒
迭代次数:4
方法1:0.0毫秒
方法2:0.0毫秒
迭代次数:8
方法1:0.0毫秒
方法2:0.0毫秒
迭代次数:16
方法1:0.0毫秒
方法2:0.0毫秒
迭代次数:32
方法1:0.0毫秒
方法2:0.0毫秒
迭代次数:64
方法1:0.1毫秒
方法2:0.1毫秒
迭代次数:128
方法1:0.1毫秒
方法2:0.4毫秒
迭代次数:256
方法1:0.3毫秒
方法2:0.2毫秒
迭代次数:512
方法1:0.6毫秒
方法2:0.4毫秒
迭代次数:1024
方法1:0.7毫秒
方法2:0.7毫秒
迭代次数:2048
方法1:1.5毫秒
方法2:1.1毫秒
迭代次数:4096
方法1:2.2毫秒
方法2:2.2毫秒
迭代次数:8192
方法1:4.3毫秒
方法2:3.5毫秒
迭代次数:16384
方法1:6.7毫秒
方法2:6.7毫秒
迭代次数:32768
方法1:13.7毫秒
方法2:13.4毫秒
迭代次数:65536
方法1:28.7毫秒
方法2:29.0毫秒