C#における循環構造の効率問題
C#における循環構造の効率問題
引用する
順序、選択、サイクルはすべてのプログラムの3つの構造である.今日はサイクルの小さな問題についてお話しします.
内容
c#の循環構造は4種類あります.
この4つの構成において,いずれもループ終了の判断がある.ある数字より大きく、ある数字より小さく、あるいは他の条件式の判断です.今日は数字の判断についてお話しします.
私たちの数字は定義された変数に格納されているか、集合の長さであるか、メソッドが返す情報である可能性があります.ここでは,ある方法の戻り情報について議論する.
次の方法があると仮定し、戻り値はList
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++)
{
}
後で知ったことが多くなったり、他の人の話を聞いたりして、自分の検証を経ました.このループ判定条件に問題があることが判明し,判定のたびにGetInListメソッドが呼び出され,極めて浪費される.次のように修正されます.
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は他の3つのサイクル構造とは異なり、重複するGetInListメソッド呼び出しは発生しないことが分かった.結論
1、foreachは他の3つのサイクル構造とは違います.
2、事実で話す必要がある.
Technoratiラベル:
ループ ,
for ,
foreach ,
while