程序开发 > C# > 正文

实例比较for和foreach的效率C#

亮术网 2020-07-21 本网原创

在网上看到不少有关 for 和 foreach 效率比较的文章,有的说 for 效率高,有的说 foreach 效率高。我觉得单一的说谁效率高有些片面,因为不同的情况会产生不同的结果;for 可能在某些方面比 foreach 效率高,而 foreach 在另一些方面又比 for 效率高。下面举两个实例,一个是查找字符串,另一个是查找整数。

 

1、查找字符串:

程序通过不断产生随机字符串组成 list 列表,然后再从 list 列表中查找字符中“abc”,找到后跳出循环,具体程序如下:

//测试for和foreach 效率
  public void for_foreach()
  {
    IList<string> list = new List<string>();
    string str = "agfeywskjfjdks;glywiiraqeopmnbvcxz";
    for (int i = 0; i < 100000; i++)
      list.Add(Randoms(str, 3));

  int count = list.Count;
    Stopwatch sw = new Stopwatch();

  sw.Start();
    for (int i = 0; i < count; i++)
    {
      if (list[i] == "abc")
        break;
    }
    sw.Stop();
    lblRunTime.Text += "for 用的时间:" + sw.ElapsedMilliseconds;

  sw.Reset();
    sw.Start();
    foreach(string s in list)
    {
      if (s == "abc")
        break;
    }
    sw.Stop();
    lblRunTime.Text += ";foreach 用的时间:" + sw.ElapsedMilliseconds;
  }

//生成随机数
  public string Randoms(string c, int n)
  {
    StringBuilder sb = new StringBuilder(n);
    int oneNum;
    Random rnd = new Random();
    for (int i = 0; i < n; i++)
    {
      oneNum = rnd.Next(c.Length);
      sb.Append(c[oneNum]);
    }
    return sb.ToString();
  }

 

以下是几组运行耗时数据(单位:ms):

for 用的时间:2;foreach 用的时间:3;

for 用的时间:4;foreach 用的时间:6;

for 用的时间:3;foreach 用的时间:4;

for 用的时间:5;foreach 用的时间:4;

for 用的时间:2;foreach 用的时间:2;

经比较可知,for 用的时间约少于 foreach,只有一组两者用的时间是相同的,一组 foreach 用的时间比 for 少,总体来说还是 for 效率约高于 foreach。

 

2、查找整数

程序通过 for 循环向 list 列表中添加整数,然后从 list 列表中查找 99999,找到则退出循环,具体程序如下:

//测试for和foreach 效率
  public void for_foreach_num()
  {
    IList<int> ls = new List<int>();
    for (int i = 0; i < 100000; i++)
      ls.Add(i);

  int n = ls.Count;
    Stopwatch sw = new Stopwatch();
    sw.Start();

  for (int i = 0; i < n; i++)
    {
      if (ls[i] == 99999)
        break;
    }
    sw.Stop();
    lblRunTime.Text += "for 用的时间:" + sw.ElapsedMilliseconds;

  sw.Reset();
    sw.Start();
    foreach (int i in ls)
    {
      if (i == 99999)
        break;
    }
    sw.Stop();
    lblRunTime.Text += ";foreach 用的时间:" + sw.ElapsedMilliseconds;
  }

几组运行耗时结果如下(单位:ms):

for 用的时间:1;foreach 用的时间:2

for 用的时间:2;foreach 用的时间:2

for 用的时间:2;foreach 用的时间:3

for 用的时间:1;foreach 用的时间:3

经比较可知,在四组数据中,只有一组用时相同,其它三组都是 for 用时约比 foreach 少,即 for 效率约比 foreach 高。

 

以上所举实例都是 for 的效率约高于 foreach,但这并不代表所有情况 for 都占优。其实在循环次数不是特别多的时候,它们的效率差别完全可以忽略不计;如果在编程过程中,遇到特别大的数据集,无法决定是用 for 还是用 foreach,可以先测试一下它们的效率,解除后顾之忧。