VB.NET中,如何用Redim与枚举和设置比较来重新定义布尔数组?

2026-05-06 12:141阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计756个文字,预计阅读时间需要4分钟。

VB.NET中,如何用Redim与枚举和设置比较来重新定义布尔数组?

如果您想快速重新定位一个布尔值数组,可以选择使用枚举和重置值的方法。以下是一种可能的实现方式:

若您想快速重置一个布尔值数组,哪种方法更快:直接重新定位数组或枚举并重置值?经过一些测试,它们似乎都认为redim要快得多,但我对它不是测试结果的直接执行结果不太确定。我的测试似乎表明redim更有效。

如果您想重置一个布尔值数组,哪个更快,重新定位数组或枚举和重置值?

我已经进行了一些测试,他们似乎认为redim要快得多,但我不相信它不是我运行测试的结果.

我的测试似乎表明redim几乎快了两倍.

所以有人可以关注哪个更快,为什么?您是否也期望在不同语言中获得相同的结果?

枚举测试:

Dim booleanArray(200) As Boolean Dim startTime As Date = Date.Now For i As Integer = 0 To 9999999 For l As Integer = 0 To 200 booleanArray(l) = True Next Next Dim endTime As Date = Date.Now Dim timeTaken As TimeSpan = endTime - startTime

重新测试:

Dim booleanArray(200) As Boolean Dim startTime As Date = Date.Now For i As Integer = 0 To 9999999 ReDim booleanArray(200) Next Dim endTime As Date = Date.Now Dim timeTaken As TimeSpan = endTime - startTime 这表明分配新阵列很快.当有足够的可用内存时,这是可以预期的 – 基本上它会增加一个指针和一小部分内务.

但请注意,这将创建一个新数组,其中所有元素都为False而不是True.

更合适的测试可能是在现有阵列上调用Array.Clear,在第一种情况下,这将很快消除内容.

请注意,您的第二个表单将创建更多垃圾 – 在这种情况下,它将始终保留在gen0中并且可以轻松收集,但在具有更实际内存使用的实际应用程序中,您最终可能会通过创建新数组导致垃圾收集性能问题而不是清除旧的.

这是C#中的一个快速基准测试,它测试了三种策略:

VB.NET中,如何用Redim与枚举和设置比较来重新定义布尔数组?

using System; using System.Diagnostics; public class Test { const int Iterations = 100000000; static void Main() { TestStrategy(Clear); TestStrategy(ManualWipe); TestStrategy(CreateNew); } static void TestStrategy(Func<bool[], bool[]> strategy) { bool[] array = new bool[200]; GC.Collect(); GC.WaitForPendingFinalizers(); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < Iterations; i++) { array = strategy(array); } sw.Stop(); Console.WriteLine("{0}: {1}ms", strategy.Method.Name, (long) sw.ElapsedMilliseconds); } static bool[] Clear(bool[] original) { Array.Clear(original, 0, original.Length); return original; } static bool[] ManualWipe(bool[] original) { for (int i = 0; i < original.Length; i++) { original[i] = false; } return original; } static bool[] CreateNew(bool[] original) { return new bool[original.Length]; } }

结果:

Clear: 4910ms ManualWipe: 19185ms CreateNew: 2802ms

然而,这仍然只是使用第0代 – 我个人认为Clear对于整体应用程序性能更好.请注意,如果任何其他代码引用了原始数组,它们的行为会有所不同 – “创建新”策略(ReDim)根本不会更改现有数组.

本文共计756个文字,预计阅读时间需要4分钟。

VB.NET中,如何用Redim与枚举和设置比较来重新定义布尔数组?

如果您想快速重新定位一个布尔值数组,可以选择使用枚举和重置值的方法。以下是一种可能的实现方式:

若您想快速重置一个布尔值数组,哪种方法更快:直接重新定位数组或枚举并重置值?经过一些测试,它们似乎都认为redim要快得多,但我对它不是测试结果的直接执行结果不太确定。我的测试似乎表明redim更有效。

如果您想重置一个布尔值数组,哪个更快,重新定位数组或枚举和重置值?

我已经进行了一些测试,他们似乎认为redim要快得多,但我不相信它不是我运行测试的结果.

我的测试似乎表明redim几乎快了两倍.

所以有人可以关注哪个更快,为什么?您是否也期望在不同语言中获得相同的结果?

枚举测试:

Dim booleanArray(200) As Boolean Dim startTime As Date = Date.Now For i As Integer = 0 To 9999999 For l As Integer = 0 To 200 booleanArray(l) = True Next Next Dim endTime As Date = Date.Now Dim timeTaken As TimeSpan = endTime - startTime

重新测试:

Dim booleanArray(200) As Boolean Dim startTime As Date = Date.Now For i As Integer = 0 To 9999999 ReDim booleanArray(200) Next Dim endTime As Date = Date.Now Dim timeTaken As TimeSpan = endTime - startTime 这表明分配新阵列很快.当有足够的可用内存时,这是可以预期的 – 基本上它会增加一个指针和一小部分内务.

但请注意,这将创建一个新数组,其中所有元素都为False而不是True.

更合适的测试可能是在现有阵列上调用Array.Clear,在第一种情况下,这将很快消除内容.

请注意,您的第二个表单将创建更多垃圾 – 在这种情况下,它将始终保留在gen0中并且可以轻松收集,但在具有更实际内存使用的实际应用程序中,您最终可能会通过创建新数组导致垃圾收集性能问题而不是清除旧的.

这是C#中的一个快速基准测试,它测试了三种策略:

VB.NET中,如何用Redim与枚举和设置比较来重新定义布尔数组?

using System; using System.Diagnostics; public class Test { const int Iterations = 100000000; static void Main() { TestStrategy(Clear); TestStrategy(ManualWipe); TestStrategy(CreateNew); } static void TestStrategy(Func<bool[], bool[]> strategy) { bool[] array = new bool[200]; GC.Collect(); GC.WaitForPendingFinalizers(); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < Iterations; i++) { array = strategy(array); } sw.Stop(); Console.WriteLine("{0}: {1}ms", strategy.Method.Name, (long) sw.ElapsedMilliseconds); } static bool[] Clear(bool[] original) { Array.Clear(original, 0, original.Length); return original; } static bool[] ManualWipe(bool[] original) { for (int i = 0; i < original.Length; i++) { original[i] = false; } return original; } static bool[] CreateNew(bool[] original) { return new bool[original.Length]; } }

结果:

Clear: 4910ms ManualWipe: 19185ms CreateNew: 2802ms

然而,这仍然只是使用第0代 – 我个人认为Clear对于整体应用程序性能更好.请注意,如果任何其他代码引用了原始数组,它们的行为会有所不同 – “创建新”策略(ReDim)根本不会更改现有数组.