网站链接: 我爱捣鼓
当前位置: 首页 > web开发  > Asp.net/C#

用实例告诉你C#中for和foreach那个性能更高速度更快

2021/3/1 21:29:14

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。测试环境: 硬件环境: PIII800 + CPU456 软件环境: VisualStudio.Net …

        在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。

测试环境: 

    硬件环境:   PIII800 + CPU456

    软件环境:   VisualStudio.Net  + C#

测试用例:

    利用结果集来存放记录,初始化对结果集添加记录

    分别对记录数为10000,100000,1000000条记录的时候进行采样分析

    关键测试对比代码如下,功能完全一样:

    //foreach开始时间
   datetime3 = System.DateTime.Now.TimeOfDay.ToString();
   foreach(DataRow row in relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows)
 buffer = row[RelationData.PK_TABLE_NAME].ToString();
   datetime4 = System.DateTime.Now.TimeOfDay.ToString();
   //for开始时间
   datetime5 = System.DateTime.Now.TimeOfDay.ToString();
   for(int j=0;j<1000000;j++)
         buffer = relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows[j][RelationData.PK_TABLE_NAME].ToString();
   datetime6 = System.DateTime.Now.TimeOfDay.ToString();

测试结果:

   10000条记录时:

         foreach读取时间:16:29:34.2577584

         foreach结束时间:16:29:34.2677728

         for读取开始时间:16:29:34.2677728

         for读取结束时间:16:29:34.2878016

   100000条记录时:

         foreach读取时间:16:31:10.1055808

         foreach结束时间:16:31:10.1957104

         for读取开始时间:16:31:10.1957104

         for读取结束时间:16:31:10.4460704

   1000000条记录时:

         foreach读取时间:16:33:12.6217504

         foreach结束时间:16:33:13.6332048

         for读取开始时间:16:33:13.6332048

         for读取结束时间:16:33:18.7906208

结果分析:

   1)对于10000条记录可以看出

         foreach用了 0.0100144 

         for循环用了0.0300432

         foreach所花的时间正好是for循环的 1/3

   2)对于100000条记录可以看出

         foreach用了0.0901296  

         for循环用了0.2503600

         foreach所花的时间是for循环的 36%

   3)对于1000000条记录结果可以看出

         foreach用了1.0114544  

         for循环用了4.1574160

         foreach所花的时间是for循环的 25%

        通过对这些测试结果的分析,可以看出相对于原来的for语句foreach具有更好的执行效率,foreach的平均花费时间只有for30%。通过测试结果在for和foreach都可以使用的情况下,我 们推荐使用效率更高的foreach.在测试同时我们附加的发现,用for写入数据时间大约是读取数据时间的10倍左右


相关资讯

  • C#怎么获取文件夹里所有的图片文件?

    在实际的程序开发中,我们经常需要获取某个文件夹下的所有图片,用到了C#的DirectoryInfo、GetFiles等文件操作方法,具体实现如下://自定义一个结构public struct sFileInfo{ public string FileName; public DateTime FileCreateTime;}protected void Page_Load(…

    2021/3/4 21:48:01
  • c#实现日期时间与unix时间戳互相转换

    为什么使用时间戳?关于Unix时间戳,大概是这个意思,从1970年0时0分0秒开始到现在的秒数.使用它来获得的是一个INT值,储存在数据库里只要使用INT格式就可以了,方便数据库进行排序,搜索,而且比datetime格式更节省数据库空间。 /// <summary> /// Uni…

    2021/3/4 21:40:22