ローカル関数に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