【发布时间】:2012-11-22 05:12:43
【问题描述】:
我想知道在 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 会快一点,但我不确定这是否可行,因为我认为如果数组长度为 1,.GetUpperBound 会返回 0。
任何/所有加快速度的方法(即使是一小部分)都将非常有帮助。这个程序需要很长时间才能完成,上面代码的第一行占了很大一部分时间,它被调用了 1.36 亿次。
如果有人知道如何加快 For...Next 循环,那也太好了!
【问题讨论】:
-
加快下一个循环的最简单方法是展开循环,但现在大多数编译器都会自动完成。拉出任何对循环静态或多次使用的取消引用,并避免任何装箱和拆箱。这是一篇关于 .net 托管代码优化和成本分析的好文章:msdn.microsoft.com/en-us/library/ms973852.aspx
-
@Aaron 感谢您的回复(尽管在我问这个问题 2 年后!):)。自从这篇文章以来,我已经阅读了很多关于优化的内容,但特别是查看数组是否为空对于我的大量数组来说太慢了。
-
永远不会太晚!好的,也许我应该看看问答日期;但它确实有突出的部分问题。您提出的解决方案或多或少将成为我的初步答案。基本上,当访问对象属性的成本太高时,请以更简单/更快的类型自行跟踪它。干杯。
标签: arrays vb.net performance optimization