実行時間のパフォーマンスをコードにクラスを用いた反射のに対し、"普通"のクラス
-
12-09-2019 - |
質問
の実行時間(実行時のコードを行うクラスを読み反射 同一の 同コードのクラスは予告なく変更する場合があり、新しいキーワード?
うそうです。でも話す同僚の方に反射型コードは常に遅くなります。
私の見るとを問わずどのようにクラスはもともとロード/作成されると、性能は同一でなければならないのJITコンパイラなどのようにクラスがロードされます。
私は正しいのですか。もしかしたら私を担当する参考文献では明確です。
(注:伝える事が出来るっての性能 の作成 クラスを使用反射に対する新しいキーワードとなります。というのは、実際のコード方法のクラスで作成されます。)
解決
もよりますけれど、実行しま;-p
一度だ 内部 の方法にログインしたい:通常のGITなどに適用され、通常通り(ご注意セキュリティチェックする可能性を 少し 遅くまでも信頼されない).
めに必要なもの 呼び出し 一部のコードの動的オブジェクト:
- できればキャストのオブジェクトのインタフェースやベースのクラスは静的に、その同一でなければならない。
- こん可能ですが、できる結合する特定の業務について代表者(例えば
Func<string,int>
, 通Delegate.CreateDelegate
であることを検証することがほぼ快速としても便利です。 - だかよ
DynamicInvoke()
, ですかtreacle。 - 中4.0,
dynamic
を提供する場合があり、途中ハウスで鴨-タイピングキャッシュ最適化されたタイプです。
い:こんにちはアクセスです。
他のヒント
はい、一度パフォーマンスが同じであるロードされます。
反射のパフォーマンスの低下は、アセンブリからメタデータの読み取りにバインドされているが、実行時間がまったく同じになります。インスタンスが作成されていて、あなたはそれへの参照を持っていたら、それは、ですが、それは(JITのコンパイルとすべてを含む)あなたが持っている他のクラスとして動作します。
それはあなたがリフレクションを使用する方法に依存します。それは常に遅くなりますが、あなたは、実行時にファクトリメソッドを作成するために発するILを使用する場合には時間差が本当に小さなことができます。 あなたは、単純なActivator.CreateInstanceを使用する場合、それはそんなに遅くなります。