2020年11月06日
川俣晶の縁側ソフトウェアC# コーディング How To total 896 count

【入門級】ローカル関数にstaticを付けると本当に速くなるか?

Written By: 川俣 晶連絡先

 ローカル関数にstaticを付けると速くなると言われています。

 本当でしょうか?

 確かめてみましょう。

 サンプルソースのloadl1()はstaticなし。loadl2()はstaticありです。

 確かにstaticが付いていないloadl2()の方が短い時間で処理が終わっていますね。

罠の数々 §

  • staticを付けると親メソッドの変数にアクセスできなくなってしまう。それが重要ならstaticが付けられない。しかし値を引数で渡す手もある。

参考リンク §

static (C# リファレンス)

 staticキーワードを付けると速度に大きく影響する機能とそうではない機能がある。その差は何か、上記のリンクを辿って考えて見よう。

リポジトリ §

https://github.com/autumn009/cshowto

LocalSpeed §

using System;

class Program

{

    private static int count2 = 0;

    static void Main()

    {

        int count1 = 0;

        const int loop = 1000000000;

        var start1 = DateTime.Now;

        for (int i = 0; i < loop; i++) local1();

        Console.WriteLine(DateTime.Now-start1);

        var start2 = DateTime.Now;

        for (int i = 0; i < loop; i++) local2();

        Console.WriteLine(DateTime.Now - start2);

        void local1()

        {

            count1++;

        }

        static void local2()

        {

            count2++;

        }

    }

}

実行結果 (実行結果は筆者のPCによる。マシンの環境によって数値は変化する)

00:00:05.1907502

00:00:03.5706732

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?