gpt4 book ai didi

vb.net - Redim bool 数组与枚举和设置

转载 作者:行者123 更新时间:2023-12-02 10:01:59 26 4
gpt4 key购买 nike

如果您想重置 bool 值数组,哪个更快,重新调整数组或枚举并重置值?

我已经运行了一些测试,他们似乎表明 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

Redim 测试:

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# 快速基准测试,用于测试这三种策略:

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) 根本不会更改现有数组。

关于vb.net - Redim bool 数组与枚举和设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3316135/

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