最快的方法是检查vb.net中的数组是否为空

Fra*_*meg 4 vb.net arrays optimization performance

我想知道在vb.net中检查数组是否为空的最快方法.该数组已经初始化,所以我不能使用任何查看它的检查.这是以下的当前代码:

If Not (cubes(threadnumber)(i).objects.GetLength(0) = 0) Then
   cubes(threadnumber)(i).objects = New Double() {}
   ReDim cubes(threadnumber)(i).objects(-1)
End If
Run Code Online (Sandbox Code Playgroud)

我已经做了一些测试,我知道使用'.getupperbound'要快一点,但我不确定这是否可行,因为我认为'.getupperbound'如果数组长度为1则返回0.

任何/所有加快速度的方法(甚至是分数)都将非常有用.这个程序需要很长时间才能完成,上面代码的第一行是很大一部分时间,它被称为1.36亿次.

此外,如果有人知道如何加速"下一个"循环,这也是伟大的!

谢谢 :)

弗雷泽

Rol*_*nge 5

LengthGetLength我的系统快2 Length倍(调用136M次需要0.650秒,而调用GetLength (0)需要1.480秒).

我也不明白为什么你ReDim你的阵列,你已经创建了一个新的.

我相信如果立方体是一个多维数组,这将是最快的代码:

If cubes(threadnumber)(i).objects.Length > 0 Then
    cubes(threadnumber)(i).objects = New Double() {}
End If
Run Code Online (Sandbox Code Playgroud)

如果cube不是多维数组(例如List),则应该将cubes(threadnumber)代码从循环中取出.

更新

Length6倍速度GetLength在Release模式运行没有调试器时,在这种情况下Length需要0.181s和GetLength1.175s我的系统上.这可能是因为JIT将内联调用Length,而不是调用GetLength.

是我使用的测试代码.


Fra*_*meg 0

经过一些密集的测试和分析,我发现了似乎是最快的方法(至少到目前为止)。做出这个小小的改变使我的程序速度提高了 500-600%。

当有项目添加到对象数组时,如果第二维的索引尚未在列表中,我还会将多维数据集的第二维的索引添加到列表中。任何其他建议都将受到欢迎。