`

C#中循环结构的效率问题

 
阅读更多

C#中循环结构的效率问题

引言

顺序、选择、循环是一切程序的三大结构。今天我们就来说一说循环中的一个小问题。

内容

c#的循环结构有四种:

  • for
  • while…do…
  • do…while…
  • foreach

在这四种结构中,都有循环结束的判断。大于某个数字,小于某个数字,或者是其他条件表达式的判断。今天我们就说一下关于数字的判断。

我们的数字可能存放在定义好的一个变量中,也可能从是某个集合的长度,也可能是某个方法返回的信息。这里就讨论一下某个方法的返回信息。

假定存在下面的一个方法,返回值是一个List

static List GetIntList()
{
     Console.WriteLine("第 {0} 进入GetIntList方法",Counter);
     Counter++;
     return new List(){
                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 GetIntList()
        {
            Console.WriteLine("第 {0} 进入GetIntList方法",Counter);
            Counter++;
            return new List(){
                1,2,3,4,5};
        }
    }

   
}
其实经过验证,发现,foreach不同于其他三个循环结构,是不会发生重复的GetIntList方法调用的。

结论

1、foreach和其他三个循环结构不太一样。

2、需要用事实说话。

Technorati 标签: 循环,for,foreach,while
分享到:
评论

相关推荐

    C#各种循环结构的基础用法 个人资料.rar

    以下将详细介绍C#中的几种主要循环结构:`for`、`while`、`do...while`以及`foreach`。 1. **for循环** `for`循环通常用于已知循环次数的情况。它的语法格式如下: ```csharp for (初始化; 条件检查; 更新) { /...

    C#循环案例

    C#循环案例详解 C#中的循环语句是编程语言中最基本的控制结构之一,用于重复执行某些操作。在本文中,我们将通过多个示例代码,深入探讨C#中的循环语句,特别是for循环的应用。 一、九九乘法表 在C#中,我们可以...

    几个C#嵌套循环的小例子

    在C#编程中,循环是控制程序流程的重要结构,它允许我们重复执行一段代码,直到满足特定条件。嵌套循环则是将一个循环结构放在另...在实践中,根据问题的具体需求合理地使用循环结构,是成为一名熟练的C#程序员的关键。

    数据结构 C# 代码例子

    project子目录包含了使用数据结构和算法解决《学生信息管理系统》中问题的项目,这些项目可以作为学生学习和实验的素材。ppt目录下是本书的电子课件,pdf目录下是本书的电子版本,pictures目录下是书中较大的图形...

    数据结构_顺序表_单链表_循环链表C#

    本专题主要探讨了三种基本数据结构:顺序表、单链表和循环链表,并以学生成绩管理为例,展示了它们在实际问题中的应用。下面将详细阐述这三种数据结构及其在C#语言中的实现。 首先,顺序表是一种线性数据结构,它在...

    C#游戏制作用循环

    C#中常见的循环结构有`for`、`while`和`do-while`。在游戏主循环中,`while`循环是最常用的,因为它能无限次地重复执行,直到游戏关闭。例如: ```csharp bool isRunning = true; while (isRunning) { // 更新游戏...

    For 和 Foreach 的效率问题

    本文将深入探讨`for`和`foreach`在C#中的效率差异,以及如何根据具体场景选择合适的循环方式。 首先,`for`循环是一种更基础的迭代结构,它允许程序员直接控制循环变量的初始化、条件检查和递增/递减过程。`for`...

    C#编写的顺序循环队列

    循环队列是队列的一种变体,它利用数组的“环形”特性,使得队列的尾部可以无缝地连接到头部,形成一个循环结构。这种结构克服了普通线性队列在满或空时需要额外判断和处理的问题,提高了空间利用率。 二、C#中的...

    C#循环队列

    以下是一个基本的C#循环队列实现: ```csharp public class CircleQueue { private T[] _queue; private int _head; private int _tail; private int _count; public CircleQueue(int capacity) { _queue =...

    性能测试_性能测试_c#循环优化_

    总的来说,C#循环优化是提升软件性能的重要手段,通过合理的设计和测试,我们可以找到最适合特定场景的优化策略。理解并掌握这些技巧,对于任何C#开发者来说,都是提高工作效率和编写高效代码的关键。

    C#循环移位(不好,不要介意哦)

    在C#编程中,"循环移位"是一种常见的操作,特别是在处理数组或列表时,它涉及到元素的重新排列。在给定的标题和描述中,我们可以看到一个具体的例子,它展示了如何将一个数字序列(1到6)进行循环右移。这种操作在...

    C#应用程序开发-循环结构语句.pptx

    在C#应用程序开发中,流程控制语句是编写程序时不可或缺的一部分,它们决定了程序执行的顺序。本节主要关注循环结构语句...在实际编程中,合理运用循环结构可以显著提高代码的效率,减少代码量,同时使代码更具可读性。

    C#语言参考文档官方中文版

    4. 分支和循环:掌握条件分支(if-else)和循环结构(for、foreach、while等)对于构建复杂逻辑的程序至关重要。 5. 列表和集合:C#中列表和集合的概念类似于其他编程语言中的数组和集合。学会如何使用这些数据结构...

    c#多个结构类型相同的list 组合

    在C#编程中,组合多个结构类型相同的列表到一个列表是一种常见的操作,特别是在处理大量数据时,例如从数据库批量读取或更新数据。这个过程通常被称为列表合并或列表连接。在给定的代码示例中,可以看到如何实现这一...

    c#数据结构和算法源码

    学习这些数据结构和算法的源码可以帮助你深入理解它们的工作原理,提高编程效率,优化程序性能,并解决复杂问题。在实际项目中,这些知识可以应用于数据库索引设计、图形渲染、编译器优化、机器学习等多个领域。 ...

    C#数据结构与算法 仅供学习

    7. 迭代与递归:循环和函数调用的两种常见方式,递归在解决树形结构问题时尤为有效,如阶乘计算、斐波那契数列等。 在Unity游戏开发中,数据结构和算法的应用同样广泛。例如,使用链表实现对象池管理,提高对象复用...

    《数据结构C#》代码

    1. **链表**:在C#中,链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的引用。链表分为单链表、双链表和循环链表等类型。通过链表,你可以高效地插入和删除元素,但访问元素的速度...

    c# 中数组的算法 c# 中数组的算法,c# 中数组的算法

    在C#编程语言中,数组是一种非常基础且重要的数据结构,用于存储同类型的数据集合。本文将深入探讨C#中的数组及其相关算法,帮助你更好地理解和应用这些概念。 首先,我们要理解数组的基本概念。数组是预先分配内存...

    C#答辩问题,以及运用实例

    这份文档可能涵盖了C#的基本语法,如变量、数据类型、控制结构(如if语句、for循环、switch语句)、函数、类与对象、继承、多态、接口等核心概念。这些都是构建任何C#程序的基础。特别是面向对象编程(OOP)的概念,...

Global site tag (gtag.js) - Google Analytics