C#数组和集合互相转换的几种方法的效率分析
本文的转载地址:http://www.shuonar.com/blog/6499c306-7f2d-45b2-8f43-577280ab99cd.html
在很多时候,我们需要将list集合转换为数组,或者数组转换为list,我今天测试了一下将数据转换为list的三种方法的效率,我们验证下面这个数组:
int[]testArray = new int[100000000];
for (int i = 0; i < 100000000; i++)
{
testArray[i] = i;
}
注意,数组里面的内容放多点,这样才看得出效果。
首先,我们看下使用linq的ToList<T>(),这个需要添加usingSystem.Linq;
///第一种:Linq
DateTime startTime = DateTime.Now;
List<int> list = testArray.ToList<int>();
DateTime endTime = DateTime.Now;
TimeSpan ts = endTime - startTime;
Console.WriteLine("Linq: " + ts.Milliseconds +"ms");
在我的计算机里面测试的结果是:Linq:124ms
其次,我们使用for循环遍历数组,然后把数组里面的值赋值给一个已经申明好的list集合:
///第二种:for循环
List<int> testData = new List<int>();
DateTime startFor = DateTime.Now;
for (int i = 0; i < testArray.Length; i++)
{
testData.Add(testArray[i]);
}
DateTime endFor = DateTime.Now;
TimeSpan tsFor = endFor - startFor;
Console.WriteLine("For :" + tsFor.Milliseconds +"ms");
在我的计算机里面测试的结果是:For:920ms
最后,我们使用foreach循环遍历数组,同样把数组里面的值赋值给一个已经申明好的list集合:
///第三种:foreach循环
List<int> foreachData = new List<int>();
DateTime foreachstart = DateTime.Now;
foreach (int i in testArray)
{
foreachData.Add(i);
}
DateTime foreachend = DateTime.Now;
TimeSpan tsforeach = foreachend - foreachstart;
Console.WriteLine("foreach :" + tsforeach.Milliseconds +"ms");
在我的计算机里面测试的结果是:foreach:998ms
通过这三种方法,最终我们了解到linq操作数组转集合的效率比遍历操作的效率高出很多,当然当数据溢出内存时,这种方法就不能通用了。