タグ

ブックマーク / ufcpp.net (3)

  • 式木(Expression Trees)

    実装上、ほとんどのものが、生成メソッドの名前と、NodeType 列挙子の名前はそろえてあるようです。 (条件演算子とメンバーアクセスだけ例外。 条件演算子は Expression.Condition で生成するけど、NodeType は Conditional。 メンバーアクセスは Expression.MakeMemberAccess で生成するけど、NodeType は MemberAccess。) 下準備 百聞は一見にしかずということで、 次節以降では、ラムダ式と式木の対応関係を実例を挙げて紹介していきます。 それに先立って、いくつか補助関数や変数を用意しておきます。 まず、Expression 型を作りやすくするために (型推論が働きやすくするために)、 以下のような補助関数を用意します。 static partial class Make { public static Exp

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

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

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

    概要 アプリケーション開発において、データの分析や集計などの処理は非常に重要な位置を占めます。 例として小売業を挙げると、日々蓄積された売上データを分析して、以下のような知識を得ることができます。 あまり売れていない商品を洗い出して、在庫を抱えないようにする 同時に売れやすい商品を見つけて、近い場所に陳列する 過去の売上傾向から将来の予測を立て、過不足なく商品を入荷する C# 3.0 の新機能の多くは、一言でいってしまえば、この手の「データ処理」のための機能です。 ポイント データ処理の多くはストリーム的でパイプライン的。 LINQ もその類のデータ処理。 ストリームとパイプライン データ処理の多くは、「データ・ストリームに対するパイプライン処理」と捉えることができます。 ここで、ストリームやパイプラインという言葉は以下のような意味合いです。 ストリーム データは、前から順に、1項目ずつ処

    データ処理 (C# によるプログラミング入門)
  • 1