式ツリーを構築するのではなく、ILを直接発行するメソッドを作成するとパフォーマンスに違いはありますか?より早いもの:式ツリーまたは手作業でのILの生成
答えて
最終的に表現ツリーのAPIは、relection.emitよりもわかりやすいAPIなので、効果的には同等ですが、直接的なリフレクションで表現木で行うことはできないことがたくさんあると思います。放出する。
Reflection.Emitは全体的に最も速いですが、forループがforeachよりも速いのと同じように一般にです。 reflection.emitを使用してより速く実行するコードを、式apiを使用するよりも速く書くことができる多くのシナリオがありますが、ほとんどの場合、等価になるはずです。
ここで、式APIは、いくつかの理由で少し上手くやっています。
- 直接反射.emitを使用するより簡単な方法で構成できます。式ツリーを使用して、直接ロジックを使用するよりも簡単にロジックを追加することができます
- 今後、方向リフレクションを使用するときには理解できない最適化が追加されることがあります.emit。
最終的に、私は洗濯だと言います。本当に重要でreflection.emitがよく分かっているのであれば、通常、式APIを使用しないILのショートカットをいくつか取ることができますが、それ以外の一般的な使い方では、かなり同等でなければなりません。
パーフェクト。これは私が何をしたのかの中心にあります、ありがとう。 – sircodesalot
reflection.emitおよび/またはexpression apiの世界への旅には問題はありません。 –
優秀で複雑な質問です。最近まで、Expressionは単純にすべてのシナリオを処理できませんでした。したがって、多くの場合、それは非質問でした。これはExpression.Blockなどの導入によって変化します。ほとんどの「一般的な」ケースでは、表現の使用はおそらくそれ以上のものですが、私は精密な測定値を持っていないと告白します。 Expressionのような贅沢を持たない下位レベルのフレームワークも対象としています(もちろんExpression.Blockは対象外です)。私はILの体操をうまく積み重ねるのに、表現には必ずしも適していない複雑な「デコレータ」のアプローチを使用する傾向があります(実際にはあなたのILはリフレクターなどがそれと闘うほど非定型であれば、表現にきれいに - そして私のILはかなりぎこちない傾向があります)。
申し訳ありませんが、私はあなたより多くの数値データを与えることはできません - キーポイント:
- あなたはダウンレベルのフレームワークの要件がある場合の質問はそう
- 議論の余地がある、あなたは をプロファイルする必要があると思います
- 1. 式ツリーの作成
- 2. ツリーの作成:再帰または式ツリーC#
- 3. MultiFieldQueryParserは手作業でクエリを作成するよりもずっと遅いのはなぜですか?
- 4. 作業ツリー「汚い」
- 5. コンパイル済み式から生成されたILコードを表示
- 6. なぜBOOST_FOREACHは手作業のものとまったく同じではありませんか?
- 7. 動的オブジェクトのlinq式ツリーの作成
- 8. bazaarリモートブランチの「作業ツリー」
- 9. テスト/素早く不変式を尊重した構造体のツリーを生成する
- 10. 匿名メソッド用のILの生成
- 11. 手作業でVS 2005 .vcprojを生成する
- 12. 誰でも手作業でgifを再生してみませんか?
- 13. 作業ディレクトリはツリー図のように見えますか?
- 14. 共有のgitのサブモジュールで作業ツリー
- 15. 生成されたILコードがNopで始まるのはなぜですか?
- 16. 生成されたツリーは、
- 17. 式ツリーをRで作成する
- 18. ジェンキンス「で、内部の作業ツリー」
- 19. ランダムトークンを生成するためのvalidates_uniqueness_of作業はありますか?
- 20. AppCodeでの素早いフレームワークの作成
- 21. 動的if文の式ツリーを作成できますか?
- 22. ファイアーゲームでのイベントよりもキーの早い押下
- 23. ユーザーに作業項目またはリンクされた作業項目(「作業項目のツリー」内)が割り当てられているクエリtfs workitems
- 24. 手作業で作成したパーセンタイルを使ってボックスプロットを作成する必要があります
- 25. MEFがクラスを手作業で作成するのを防ぐ
- 26. 手作業で高品質のゲートを作成する
- 27. SapUi5で手作業でバインディングを作成するには?
- 28. Javaでenum形式のツリーを作成するには?
- 29. Gitが作業ディレクトリから手作業で作成したファイルを削除しました
- 30. TreeViewツリーの生成
これはすでに試したことがありますので、結果をお知らせください。 –
私は実際にやってみようとしています。表現木がコンパイルされる方法にいくつかの基本的な違いがあります。たとえば、リフレクションによってメソッドがどのように実行されるか、式ツリーから呼び出されたときや動的バインディングを介して呼び出されたときなど、メソッドの実行方法と基本的な違いがあります。だから私は、 "コンパイル"表現木が何らかの意味でILが手で生成するものとは異なる結果を生み出すのだろうかと思います。 – sircodesalot
両方の方法で試してみて、ストップウォッチを手に入れてください。すぐにわかるでしょう。それが知る唯一の方法です。 –