読者です 読者をやめる 読者になる 読者になる

プログラミングでアイデアを具現化したい

あらゆるものを具現化するためにプログラミングを始めました。主にC#

foreach文とfor文の速度比較


独習C#より

foreachについて。個人的にはほとんどfor文で書けていたため、ほとんど使った事がない。
f:id:tos5511:20151229120439j:plain
foreachの構文

単純にあまり使う意味がわからないのでfor文と速度比較してみた。

foreachで配列の合計を求める。

    class Program {
        static void Main(string[] args) {
            Stopwatch sw = new Stopwatch();
            
            long sum = 0;
            int[] nums = new int[9999999];

            //nums配列に初期値を代入
            for(int i=0;i< nums.Length; i++) {
                nums[i] = i;
            }

            //foreachを使って配列の合計を算出する
            //タイマスタート
            sw.Start();
            foreach (int x in nums) {
                sum += x;
            }
            //タイマストップ
            sw.Stop();
            double sec= (double)sw.ElapsedTicks 
                      / (double)Stopwatch.Frequency;
            Console.WriteLine(sum+"計測タイム"+sec);
        }
    }

実行結果
f:id:tos5511:20151229122418j:plain

for文でやってみた。

    class Program {
        static void Main(string[] args) {
            Stopwatch sw = new Stopwatch();
            
            long sum = 0;
            int[] nums = new int[9999999];

            //nums配列に初期値を代入
            for(int i=0;i< nums.Length; i++) {
                nums[i] = i;
            }

            //foreachを使って配列の合計を算出する
            //タイマスタート
            sw.Start();
            for(int i = 0; i < nums.Length; i++) {
                sum += i;
            }

            //タイマストップ
            sw.Stop();
            double sec= (double)sw.ElapsedTicks 
                      / (double)Stopwatch.Frequency;
            Console.WriteLine(sum+"計測タイム"+sec);
        }
    }

実行結果
f:id:tos5511:20151229122839j:plain

何度かやってみたけど、for文のほうが毎回早かった。



追記 同じ事をやっている方がいました。
Linqのsumも比較されていました。やはりforが早いみたい。

goo.gl