C#中循环结构的效率问题
2011-06-08 11:26
211 查看
C#中循环结构的效率问题
引言
顺序、选择、循环是一切程序的三大结构。今天我们就来说一说循环中的一个小问题。
内容
c#的循环结构有四种:
for
while…do…
do…while…
foreach
在这四种结构中,都有循环结束的判断。大于某个数字,小于某个数字,或者是其他条件表达式的判断。今天我们就说一下关于数字的判断。
我们的数字可能存放在定义好的一个变量中,也可能从是某个集合的长度,也可能是某个方法返回的信息。这里就讨论一下某个方法的返回信息。
假定存在下面的一个方法,返回值是一个List<int>
static List<int> GetIntList() { Console.WriteLine("第 {0} 进入GetIntList方法",Counter); Counter++; return new List<int>(){ 1,2,3,4,5}; }
需要对这个方法的返回结果进行循环处理,刚开始大多数都会这么写,以for循环为例。
for (int i = 0; i < GetIntList().Count; i++) { }
后来知道的多了一些,或者是听到别人说,经过自己的验证。发现这个循环判断条件有问题,每次判断都会重新调用GetIntList方法,造成极大地浪费。就会修改成下面的样子。
int len=GetIntList().Count; for (int i = 0; i < len; i++) { }
先定义一个变量,保存集合的长度。
经过验证,while…do、do…while也存在类似的问题,也需要注意。
有时候我们需要做的就是对集合里面的每个元素进行处理,我们会选用foreach这个便利的循环结构,因为他不用考虑下标越界的问题。从上面的验证结果看,就会有人说下面的代码有问题。
foreach (int i in GetIntList()) { }
到底有没有问题呢?需要验证。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Configuration;
using MongoDB.Driver;
using AutoTest.ServiceLocator;
using System.Reflection;
using AutoTest.Common;
namespace AutoTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("------------------------------Begin------------------------------");
Console.WriteLine("Foreach循环");
Counter = 1;
foreach (int i in GetIntList())
{
}
Console.WriteLine("For循环");
Counter = 1;
for (int i = 0; i < GetIntList().Count; i++)
{
}
Console.WriteLine("do...while...循环");
Counter =1;
int num=0;
do
{
num++;
}
while (num < GetIntList().Count );
Console.WriteLine("while...do...循环");
Counter = 1;
num=0;
while (num < GetIntList().Count)
{
num++;
};
Console.WriteLine("------------------------------End------------------------------");
Console.ReadKey();
}
static int Counter=1;
static List<int> GetIntList() { Console.WriteLine("第 {0} 进入GetIntList方法",Counter); Counter++; return new List<int>(){ 1,2,3,4,5}; }
}
}
其实经过验证,发现,foreach不同于其他三个循环结构,是不会发生重复的GetIntList方法调用的。
结论
1、foreach和其他三个循环结构不太一样。
2、需要用事实说话。
Technorati 标签: 循环,for,foreach,while
相关文章推荐
- C#中循环结构的效率问题
- C#中循环结构的效率问题
- C#中循环结构的效率问题
- C#中循环结构的效率问题
- Matlab数组结构和循环效率的问题
- 作业 3 应用分支与循环结构解决问题
- C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解
- 关于for循环的执行效率问题
- c# 选择结构与循环结构
- C++/ C循环语句的效率问题
- 递归的效率问题及递归与循环比较
- 作业 3 应用分支与循环结构解决问题 计算平均成绩
- C#字符串连接的效率问题
- C#访问SQLLite数据库效率低下的问题
- 第十一周实验报告1--学会使用循环控制语句解决实际问题,并强化注重效率的观念
- 关于大数循环效率优化的方法(C#)
- 数据结构起步能力自测3-数组元素循环右移问题
- 作业三4-应用分支与循环结构解决问题——判断年份是否为闰年
- 控制结构之循环:解决打印图形问题
- 13、C#里面do...while循环结构的使用