c#之循环效率
很多人在保存数据时候对于使用数组、集合等?然后遍历数据的时候是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#之循环效率的更多相关文章
- for、foreach和MoveNext循环效率粗比较
今天没事对for循环.foreach循环.MoveNext循环,执行效率进行了对比:粗略测试代码如下: static void Main(string[] args) { #region 三种方式循环 ...
- foreach与正常for循环效率对比
foreach foreach编译成字节码之后,使用的是迭代器实现的. foreach特点: 无须获取容器大小 需要创建额外的迭代器变量 遍历期间得到的是对象,没有索引位置信息,因此不能进行赋值操作. ...
- ArrayList哪种循环效率更好你真的清楚吗
ArrayList简介 声明:以下内容都是基于jdk1.8的 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了 ...
- 循环效率对比 js node c# mssql
- C++ for循环效率
1.考虑二维数组,在C++中,以先行后列的方式存储连续的数组元素.也就是同一行的元素在一起,同一列的元素之间有间隔,且间隔相同.理想情况下,二维数组的元素是随机访问的,可以直接定位,即i*列数+j.因 ...
- 两个for循环效率,哪个高
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数.
- Oracle游标进行循环效率比较
对300万一张表数据,用游标进行循环,不同写法的效率比较 对300万一张表数据,用游标进行循环,不同写法的效率比较 1.显示游标 declare cursor cur_2 is sel ...
- Java中for each与正常for循环效率对比
循环ArrayList时,普通for循环比foreach循环花费的时间要少一点:循环LinkList时,普通for循环比foreach循环花费的时间要多很多. 当我将循环次数提升到一百万次的时候,循环 ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
随机推荐
- 单例--iOS
GCD单例: static ModulesManager * sharedManager = nil; + (id)sharedInstance { static dispatch_once_t on ...
- Swoole:重新定义PHP
Swoole PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异 ...
- 后台邮箱配置SMTP函数,如何把发件人设置为自定义昵称
默认的php的mail函数,太坑爹! 用PHPCMS配置好SMTP后,虽然能发送邮件. 但是收件人一项,显示的是邮箱地址@前面的内容. 今天研究了一下午,终于在一个论坛里找到了答案. 原来PHPCMS ...
- PHP Memcached 实现简单数据库缓存
Memcache常用方法 Memcache::add — 添加一个值,如果已经存在,则返回false Memcache::addServer — 添加一个可供使用的服务器地址 Memcache::cl ...
- Select与Epoll比较
一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解 ...
- pureMVC简单示例及其原理讲解三(View层)
本篇说的是View层,即视图层,在本示例中包括两个部分:MXML文件,即可视控件:Mediator. 可视控件 可视控件由UserForm.mxml(图1)和UserList.mxml(图2)两个文件 ...
- mysql表名忽略大小写
安装完数据库,建表查询发现表不存在,原来是表名大小写写错了,原来Linux下的MySQL默认是区分表名大小写的,这样的话对变成灰带来很大的不变,如何才能使mysql表名不区分大小写呢? 通过如下设置, ...
- Microsoft Office 2016 简体中文 Vol 版镜像下载(Pro Plus、Visio、Project 下载)
在使用上,零售版和批量授权版并没有区别,只是授权方式方面的区别,相对而言,VOL 版的更容易激活一些,其他并没有什么区别了. 有需要的可以在下面下载:(以下均是 VL 版) 版本:Office 201 ...
- Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目
开发环境 OS : Windows 10 10.0.14393 IDE : Visual Studio 2015 Community With Update 3 Database : PostgreS ...
- HDU5058
So easy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...