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算法.一致性 ...
随机推荐
- OpenCV点滴2
明天回家了-- 昨天去见了老师,去之前告诉自己不要紧张,去了后还是紧张了,语无伦次,很没礼貌--(不敢看老师的眼睛) 刚才妈打电话说让我早点回去,不知道为什么,在空荡荡的宿舍里听到妈的声音,眼泪会夺眶 ...
- 【USB-HID在STM32上的实现】-00-开始
前一段时间参照网上的例程搞了一阵STM32F103的HID程序,改了改例子实现了一个摇杆的外设控制功能.1通道开关量输入,2通道模拟量输入. 之后有空了总结一下,防止忘记.
- css :active伪类的理解
/*active伪类为点击鼠标按下去还没松开鼠标的那一瞬间的事件*/
- SecureCRT 使用
1. 连接linux 服务器 http://www.cnblogs.com/SimonGao/p/4959274.html
- 7-1 vim 编辑器
1. vi:visual interface. 1. vim:vi improved 这些都属于全屏编辑器,又是模式化编辑器 vim模式(3种) 编辑模式(命令模式) 输入模式 末行模式 模式转换 编 ...
- Webx3学习笔记(2)——基本流程
Webx3项目是运行在jetty/tomcat这种Web应用容器中的,Web应用的模式都是请求-响应的.一个请求通过浏览器发出,封装为HTTP报文到达服务端,被容器接受到,封装为HttpRequest ...
- Java Ant Could not find the main class: org.eclipse.ant.internal.launching.remote.InternalAntRunner. Program
参考:http://blog.csdn.net/jiangtaoking/article/details/49151763 The solution is to go to Run as → Exte ...
- 使用Flex构建Web和移动参考应用程序
范例文件 Shopping Cart Sales Dashboard Expense Tracker 需要的其他产品 Android 2.2及更高版本或Android 3.0及更高版本的设备 仅仅在F ...
- jmeter测试计划
测试计划配置 用户定义的变量: 测试计划上可以添加用户定义的变量.一般添加一些系统常用的配置.如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用 ...
- Java错题
加粗为正确答案,绿色为错选答案 1.对于以下代码: for ( int i=0; i<10; i++) System.out.println(i); for循环后,i的值是多少? A.i不再存 ...