今天没事对for循环、foreach循环、MoveNext循环,执行效率进行了对比;粗略测试代码如下:
static void Main(string[] args) { #region 三种方式循环执行效率测试 List<int> intList = new List<int>(); for (int i = 0; i < 100000000; i++) { intList.Add(i); } #region for循环执行时间测试 Stopwatch sw_1 = new Stopwatch(); string excuteTime_1; int sum1 = 0; sw_1.Start(); for (int i = 0; i < intList.Count; i++) { sum1 += intList[i]; } sw_1.Stop(); excuteTime_1 = sw_1.ElapsedMilliseconds.ToString(); #endregion #region foreach循环执行时间测试 Stopwatch sw_2 = new Stopwatch(); int sum2 = 0; string excuteTime_2; sw_2.Start(); foreach (var item in intList) { sum2 += item; } sw_2.Stop(); excuteTime_2 = sw_2.ElapsedMilliseconds.ToString(); #endregion #region enumerator.MoveNext循环执行时间 Stopwatch sw_3 = new Stopwatch(); string excuteTime_3; int sum3 = 0; //using (IEnumerator<int> enumerator = intList.GetEnumerator())//1060 //{ using (var enumerator = intList.GetEnumerator())//630 { //IEnumerator<int> enumerator = intList.GetEnumerator();//1631 //var enumerator = intList.GetEnumerator();//976 sw_3.Start(); while (enumerator.MoveNext()) { sum3 += enumerator.Current; } sw_3.Stop(); excuteTime_3 = sw_3.ElapsedMilliseconds.ToString(); } #endregion Console.WriteLine("for循环执行时间:" + excuteTime_1); Console.WriteLine("foreach循环执行时间:" + excuteTime_2); Console.WriteLine("movenext循环执行时间:" + excuteTime_3); /* * 1)、通过以上对for循环、foreach循环和Enumerator.MoveNext()方式循环的测试,显示执行效率由高到低依次为:MoveNext>foreach>for。 * 2)、上面的结论前提是在获取IEnumerator<T>时,用弱类型var,而不是强类型IEnumrator<int>); * 3)、如果变量用强类型,MoveNext的效率显著下降,比foreach低,甚至比for循环效率还低。 */ #endregion #region Queue队列测试 QueueClass.QueueFun_1(); #endregion QueueClass queueClass = new QueueClass(); Console.ReadKey(); }
最后又一点比较奇怪,
IEnumerator<int> enumerator = intList.GetEnumerator()
var enumerator = intList.GetEnumerator() 强类型的执行效率比弱类型的执行效率低,而且低了不少。有哪位大侠知道其中缘故,还请不吝赐教,先谢过。
时间: 2024-11-08 22:32:46