gpt4 book ai didi

c# - 列表的 Clear() 使 Add() 更快?

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:05 25 4
gpt4 key购买 nike

我写了一个小项目来测试类和结构的初始化与将它们添加到列表之间的时间差异。
它只是在 foreach 循环中创建 10000000 个类,将它们添加到列表并将所需时间写入控制台。然后结构相同。这是在 while(true) 循环中。每个循环的开头都以两个列表的 .Clear() 开头。

我的类(class)

internal static void Main(string[] args)
{
var classes = new List<CoordClass>();
var structs = new List<CoordStruct>();

var sw = new Stopwatch();

while (true)
{
classes.Clear();
structs.Clear();
sw.Reset();
sw.Start();

for (var i = 0; i < 10000000; i++)
{
classes.Add(new CoordClass(23, 24));
}

sw.Stop();
Console.WriteLine("Classes: {0} ms ({1})", sw.ElapsedMilliseconds, classes.Count);
sw.Reset();

sw.Start();

for (var i = 0; i < 10000000; i++)
{
structs.Add(new CoordStruct(23, 24));
}

sw.Stop();
Console.WriteLine("Structs: {0} ms ({1})", sw.ElapsedMilliseconds, structs.Count);
Console.WriteLine("===================");
}

结构/类

 public struct CoordStruct
{
public int x, y;

public CoordStruct(int p1, int p2)
{
x = p1;
y = p2;
}
}

public class CoordClass
{
public int x, y;

public CoordClass(int p1, int p2)
{
x = p1;
y = p2;
}
}

我的输出如下:

900 毫秒(类(class))
300 毫秒(结构)
900 毫秒(类(class))
100 毫秒(结构)

在第一个循环之后,向它的列表添加类并没有更快,但是添加结构要快得多。为什么??

我在 Release 构建中运行此测试,附加调试器来自 Visual Studio 2012。

最佳答案

After the first loop the adding of classes to it's list isn't be faster but the adding of structs is a lot faster.

错了。带有类的版本的列表插入时间减少了,但您无法分辨,因为它被实例创建的成本所淹没,而这并不快。尝试在循环外创建一个实例,然后多次添加它。

然后你会看到List<SomeClass>List<SomeStruct>受益于预分配。

关于c# - 列表的 Clear() 使 Add() 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450196/

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