2013年3月25日のブックマーク (2件)

  • [雑記] 動的コード生成のパフォーマンス(C# によるプログラミング入門)

    概要 .NET Framework のバージョンが上がるたびに色々と追加され、 今や、動的コード生成にもさまざまなやり方が。 ということで、並べて比較してみたいと思います。 「動的 = リフレクション = むちゃくちゃ遅い」というイメージをもたれる方も多いと思いますが、 実際のところ、1度生成したコードをキャッシュしておくなどの工夫をすれば、意外と許容範囲なパフォーマンスが得られます。 (GUI の描画部分やネットワーク通信部分の遅延と比べれば、演算部分の数倍程度の差は取るに足らない場合が多く、 過剰に気にする必要はありません(もちろん、状況次第)。) 比較コード含めたソースコード一式: DynamicPerformance.zip ポイント 毎回リフレクションを呼び出すのはやっぱりかなり(2~3桁)遅い。 キャッシュ機構を使えば、静的なコードの数倍程度までは速くできる。 C# 4.0 の

    [雑記] 動的コード生成のパフォーマンス(C# によるプログラミング入門)
    pknight
    pknight 2013/03/25
  • dynamic の内部実装

    概要 Ver. 4.0 dynamic って内部的にはどうなってるの?という話。 C# の dynamic は、「型が動的」というよりは、「静的な型に対する動的コード生成」と言った方が正確です。 動的に生成したコードはキャッシュされていて、2度目の呼び出しからはかなり効率よく実行されます。 このような手法はインラインメソッドキャッシュ(inline method cache)と呼ばれています。 注意: 内部的な話なので、C# のバージョンアップで実装方法が変わる可能性もあります(基的な原理は変わらないと思いますが)。 (今このページに書かれている内容は、C# 4.0 の時点の実装に基づいています。) ポイント dynamic 型ってのは実はなくて、内部的には object。 CallSite クラスを使って動的コード生成。 動的 callsite dynamic を使ったコードは、内部的

    dynamic の内部実装
    pknight
    pknight 2013/03/25