将数据添加到集合中,效率更高
本文关键字:效率 集合 数据 添加 | 更新日期: 2023-09-27 17:56:18
我正在向集合添加数据,但我不知道哪个更有效。
使用foreach
循环,
internal class CollectionClass
{
public List<string> ListData { get; set; }
public CollectionClass()
{
ListData = new List<string>();
string[] names = { "Matt", "Joanne", "Robert" };
foreach (var item in names)
{
ListData.Add(item);
}
}
}
还是这样更有效率?
internal class CollectionClass
{
public List<string> ListData { get; set; }
public CollectionClass()
{
ListData.Add("Matt");
ListData.Add("Joanne");
ListData.Add("Robert");
}
}
所有的逻辑都表明是后者,但大数据是这样吗?
除非您添加数百万个条目,否则没有太大区别,因此请选择您更熟悉的代码。
这是 4 种不同方式的基准。
1)带循环的数组(如第一种方法)。
2) 带AddRange
的数组。几乎相同,但代码更好一些。
3)使用Add
(如第二种方法)。
4) 使用列表初始值设定项。
可悲的是,我不能运行每个测试超过 10,000 次,因为 dotnetfiddle.net 会给出内存错误,但您可以复制代码并在数字更高的计算机上尝试,例如 100,000。无论如何,结果是 1 和 2 几乎相同,并且比非常接近的 3 和 4 更快。但是您可以清楚地看到,即使在插入 10,000 次时,差异也很小 3 个项目。所以真的可以忽略不计。
链接到小提琴演示
测试结果(以毫秒为单位):
测试1:6
测试2:6
测试3: 2
测试4: 2
测试代码:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var c = new CollectionClass();
var watch = System.Diagnostics.Stopwatch.StartNew();
for (var i = 0; i < 10000; i++)
c.Test1();
watch.Stop();
Console.WriteLine("Test1:" + watch.ElapsedMilliseconds);
watch = System.Diagnostics.Stopwatch.StartNew();
for (var i = 0; i < 10000; i++)
c.Test2();
watch.Stop();
Console.WriteLine("Test2:" + watch.ElapsedMilliseconds);
watch = System.Diagnostics.Stopwatch.StartNew();
for (var i = 0; i < 10000; i++)
c.Test3();
watch.Stop();
Console.WriteLine("Test3:" + watch.ElapsedMilliseconds);
watch = System.Diagnostics.Stopwatch.StartNew();
for (var i = 0; i < 10000; i++)
c.Test4();
watch.Stop();
Console.WriteLine("Test4:" + watch.ElapsedMilliseconds);
}
}
internal class CollectionClass
{
public List<string> ListData { get; set; }
public void Test1()
{
ListData = new List<string>();
string[] names = { "Matt", "Joanne", "Robert" };
foreach (var item in names)
ListData.Add(item);
}
public void Test2()
{
string[] names = { "Matt", "Joanne", "Robert" };
ListData = new List<string>();
ListData.AddRange(names);
}
public void Test3()
{
ListData = new List<string>();
ListData.Add("Matt");
ListData.Add("Joanne");
ListData.Add("Robert");
}
public void Test4()
{
ListData = new List<string>(){ "Matt", "Joanne", "Robert" };
}
}