gpt4 book ai didi

arrays - 检查数组是否为空的最快方法

转载 作者:行者123 更新时间:2023-12-02 03:17:35 25 4
gpt4 key购买 nike

我想知道在 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

我已经做了一些测试,我知道使用 .GetUpperBound 会更快一些,但我不确定这是否有效,因为我认为 .GetUpperBound如果数组长度为 1,则返回 0。

任何/所有加速这一过程的方法(即使是部分加速)都将非常有帮助。这个程序需要很长时间才能完成,上面代码的第一行占了很大一部分时间,被调用了 1.36 亿次。

此外,如果有人知道如何加速 For...Next 循环,那就太好了!

最佳答案

Length 在我的系统上比 GetLength 快大约 2 倍(调用 Length 136M 次需要 0.650 秒,而调用 GetLength ( 0) 需要 1.480 秒)。

我也不明白为什么你要重新调整数组,你已经创建了一个新数组。

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

If cubes(threadnumber)(i).objects.Length > 0 Then
cubes(threadnumber)(i).objects = New Double() {}
End If

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

更新

在没有调试器的 Release模式下运行时,

LengthGetLength 快 6 倍,在这种情况下 Length在我的系统上需要 0.181 秒,GetLength 需要 1.175 秒。这可能是因为 JIT 会内联对 Length 的调用,但不会内联对 GetLength 的调用。

This是我使用的测试代码。

关于arrays - 检查数组是否为空的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com