请考虑以下代码:
Dim arr1 As New List(Of Double)
Dim arr2 As New List(Of Object)
Dim timeStart As DateTime = Now
For x As Integer = 0 To 1000000
arr1.Add(3.14159)
Next
Dim timeEnd As DateTime = Now
MsgBox(((timeEnd - timeStart).Seconds).ToString())
timeStart = Now
arr2.Add(New List(Of Double))
For x As Integer = 0 To 1000000
arr2(0).add(3.14159)
Next
timeEnd = Now
MsgBox(((timeEnd - timeStart).Seconds).ToString())
它涉及2个列表。第一个是1维,第二个是2维。
第一个例程(在第一个列表上运行)在大约.015秒内完成。然而,第二个例程(在第二个列表上运行)需要大约10秒钟。唯一的区别是第二个列表是二维的。
我在这里遗漏了什么吗?有没有办法加快速度,或者我做错了什么?我有一个程序,需要几个二维数组,它现在运行速度非常慢。我如何加快速度,以便获得与列表为1维时相同的反馈?
答案 0 :(得分:8)
问题在于一行代码。
让arr2强力输入,它会更快,更快......
Dim arr2 As New List(Of List(Of Double))
我进行了一次快速测试,它从我的计算机上的大约7秒钟变为17毫秒,这一次更改。
正如CodeInChaos正确指出的那样,缓慢的原因更多地与.Add()
方法dynamically dispatched相比更多。
编辑: 用Option Strict On编写VB.NET是将来避免此类问题的一种方法。通过执行此操作,您将看到编译时错误,其中显示“Option Strict On禁止后期绑定。”