很多人在保存数据时候对于使用数组、集合等?然后遍历数据的时候是for、froeach?

下面我就写一个小例子进行测试看看,话不多说,直接用数据说话。

1.构建数据分别是数组、集合构建,数据类型分别是值类型、引用类型

public static List<int> ListData = new List<int>();
public static int[] ArrayData = new int[];
public static List<people> ListPople = new List<people>();
public static people[] ArrayPeople = new people[];
public class people{
public string Name { get; set; }
public int Age { get;set }
public int Sex { get; set; }
}
public static void InitData() { for (int i = , j = ; i < j; i++)
{
ListData.Add(i);
ArrayData[i] = i;
ListPople.Add(new people() { Age=i, Name="N"+i, Sex= });
ArrayPeople[i] = new people() { Age = i, Name = "N" + i, Sex = };
}
}

2.for

static void Main(string[] args)
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
Console.WriteLine("值类型for (int i = 0; i < count; i++)");
stopwatch.Start();
for (int i = ; i < ArrayData.Length; i++)
{
Console.WriteLine(ArrayData[i]);
}
stopwatch.Stop();
Console.WriteLine("值类型使用时间:"+ stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("值类型for (int i = 0,j =count;i<j;i++)");
stopwatch.Start();
for (int i = ,j = ArrayData.Length; i < j; i++)
{
Console.WriteLine(ArrayData[i]);
}
stopwatch.Stop();
Console.WriteLine("使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("引用类型 for (int i = 0; i < count; i++)");
stopwatch.Start();
for (int i = ; i < ArrayPeople.Length; i++)
{
Console.WriteLine(ArrayPeople[i].Name);
}
stopwatch.Stop();
Console.WriteLine("使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("值类型for (int i = 0,j =count;i<j;i++)");
stopwatch.Start();
for (int i = , j = ArrayPeople.Length; i < j; i++)
{
Console.WriteLine(ArrayPeople[i].Name);
}
stopwatch.Stop();
Console.WriteLine("使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.ReadLine(); }

1万数据

5万数据

3.foreach

static void Main(string[] args)
{
InitData(); System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
Console.WriteLine("值类型 foreach");
stopwatch.Start();
foreach (int i in ListData)
{
//Console.WriteLine(i);
}
stopwatch.Stop();
Console.WriteLine("值类型使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("引用类型 foreach");
stopwatch.Start();
foreach (var i in ListPople)
{
//Console.WriteLine(i.Name);
}
stopwatch.Stop();
Console.WriteLine("使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.ReadLine(); }

1万数据

5万数据

4.委托货其他方式

static void Main(string[] args)
{
InitData(); System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
Console.WriteLine("数值类型:Array.ForEach");
stopwatch.Start();
Array.ForEach<int>(ListData.ToArray(), (value)=>{
});
stopwatch.Stop();
Console.WriteLine("值类型使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("引用类型:Array.ForEach");
stopwatch.Start();
Array.ForEach<people>(ListPople.ToArray(), (value) => {
});
stopwatch.Stop();
Console.WriteLine("值类型使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("数值类型:Parallel.ForEach");
stopwatch.Start();
Parallel.ForEach(ListData, (value) => {});
stopwatch.Stop();
Console.WriteLine("使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.WriteLine("引用类型:Parallel.ForEach");
stopwatch.Start();
Parallel.ForEach(ListPople, (value) => { });
stopwatch.Stop();
Console.WriteLine("使用时间:" + stopwatch.ElapsedTicks);
stopwatch.Reset(); Console.ReadLine(); }

1万数据

5万数据

没有对比就没有伤害,所以大家在项目中遇到这类问题,还是选择合适自己的方法进行......

c#之循环效率的更多相关文章

  1. for、foreach和MoveNext循环效率粗比较

    今天没事对for循环.foreach循环.MoveNext循环,执行效率进行了对比:粗略测试代码如下: static void Main(string[] args) { #region 三种方式循环 ...

  2. foreach与正常for循环效率对比

    foreach foreach编译成字节码之后,使用的是迭代器实现的. foreach特点: 无须获取容器大小 需要创建额外的迭代器变量 遍历期间得到的是对象,没有索引位置信息,因此不能进行赋值操作. ...

  3. ArrayList哪种循环效率更好你真的清楚吗

    ArrayList简介 声明:以下内容都是基于jdk1.8的 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了 ...

  4. 循环效率对比 js node c# mssql

  5. C++ for循环效率

    1.考虑二维数组,在C++中,以先行后列的方式存储连续的数组元素.也就是同一行的元素在一起,同一列的元素之间有间隔,且间隔相同.理想情况下,二维数组的元素是随机访问的,可以直接定位,即i*列数+j.因 ...

  6. 两个for循环效率,哪个高

    在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数.

  7. Oracle游标进行循环效率比较

    对300万一张表数据,用游标进行循环,不同写法的效率比较 对300万一张表数据,用游标进行循环,不同写法的效率比较   1.显示游标   declare     cursor cur_2 is sel ...

  8. Java中for each与正常for循环效率对比

    循环ArrayList时,普通for循环比foreach循环花费的时间要少一点:循环LinkList时,普通for循环比foreach循环花费的时间要多很多. 当我将循环次数提升到一百万次的时候,循环 ...

  9. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

随机推荐

  1. JS拖动技术--- 关于setCapture

    <script type="text/javascript"> <!-- window.onload=function(){   objDiv = documen ...

  2. Mysql中各种常见数据库存储引擎对比

  3. php绘图-报表

    1.PHP报表的创建,通过绘图,过程 要先开启gb库, 可以使用jpgraph(绘图框架)快速制作一些图形 报表的作用:可以制作一些统计图,地形图,分布图等,还可以做验证码图片(通过在画布上加字和干扰 ...

  4. Windows server 2008 R2 64位系统安装ZendOptimizer-3.3.0a-Wind

    如果不安装ZEND的话,一些PHP网站程序使用ZEND加密后就无法使用,比如DISCUZ,SHOPEX,ECSHOP等,所以要想安装这些程序,ZEND是一定要安装的,要不会出现乱码等问题. 安装ZEN ...

  5. Spring mvc配置Json返回

    第一种 配置 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHand ...

  6. WinForm TextBox 实现自动索引功能

    源代码如下: http://pan.baidu.com/s/1bnOz4hp

  7. Web应用中监听者的通知顺序按照DD中的定义顺序

    Web应用中监听者的通知顺序按照DD中的定义顺序: XML: <?xml version="1.0" encoding="UTF-8"?> < ...

  8. .Net学习难点讨论系列17 - 线程本地变量的使用

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  9. shell编程其实真的很简单(三)

    通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习s ...

  10. Salesforce使用truncate清空数据库

    如果想快速的清空MySQL中的表,可以使用Truncate命令.Truncate能够快速的,对数据进行无差别的清空. 在Mysql中使用truncate的语法是TRUNCATE TABLE [Tabl ...