C#, C♯, C#相談室 Part48at TECH
C#, C♯, C#相談室 Part48 - 暇つぶし2ch528:デフォルトの名無しさん
08/09/28 07:58:39
>>524
> 普通の関数>>>>仮想関数>デリゲートってかんじ 

普通の関数が大きく有利になるケースとして、
テストに使用した関数がサイズが小さくJITでインライン化された場合がある。
仮想関数やデリゲートの場合はサイズが小さくてもインライン化されない。
int f(int i) { if (i>=0) return i; else -i; } 
という関数を使用した場合普通の関数はJITでインライン化されて非常に有利になる。

最適化をOFFにすればインライン化は抑制されるが、
最適化前提で設計されている.NETのパフォーマンス測定で意味のある行為ではない。
最適化ONのままインライン化を抑制するには無駄なコードを挿入してサイズを増やす必要がある。
テストでは引数i は負になることはないとする。
int f(int i) { if (i>=0) return i;
 意味のない大量のコード; -- ただし最適化で捨てられないように
  Randomで生成して結果はConsoleに出力するようにするなど工夫が必要
else -i; } 

さらにデリゲートに関してはデリゲートの生成を減らす工夫が必要になる。
これらの条件でテストすると普通の関数・仮想関数・デリゲートはほぼ変わらなくなる。




次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch