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

标签 c# .net performance

我写了一个小项目来测试类和结构的初始化与将它们添加到列表之间的时间差异。
它只是在 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/

相关文章:

c# - 由于其在 Windows 窗体中的保护级别而无法访问

android - 如何在 Nvidia Shield 上正确计时 Android RenderScript 代码

windows - 与 GUI 应用程序相比,相同的代码作为 Windows 服务运行得更慢

c++ - 快速 log2(float x) 实现 C++

c# - JQuery 中的自动完成

c# - 当无效凭据与基本身份验证一起使用时,Windows.Web.Http.HttpClient#GetAsync 引发不完整的异常

c# - 使用 ASP.Net 实现多语言网站

.net - 如何从 Metro P/Invoke 到 native dll?

c# - C# 中找不到文件错误

c# - Monotouch TouchUpInside 不起作用,TouchDown 起作用