.NETリフレクションの「コスト」とは?[重複しています]。
質問
重複の可能性があります。
.NETリフレクションはどの程度高価ですか?
私は現在、リフレクションが親友であるようなプログラミング精神でいます。厳密なインターフェイスではなく、緩やかな実装を可能にするコンテンツの動的読み込みや、多くのカスタム属性によく使っています。
リフレクションを使用するための本当のコストは何ですか?
テーブル定義へのすべてのプロパティに対する私たち自身のLINQ以前のDALオブジェクトコードのようなキャッシュされたリフレクションを持つために、頻繁に反映されるタイプのための努力に値するでしょうか?
キャッシュのメモリフットプリントはリフレクションのCPU使用率を上回るか?
どのように解決するのですか?
Reflectionでは、型のメタデータを大量に読み込んでから処理する必要があります。その結果、メモリのオーバーヘッドが大きくなり、実行速度が遅くなることがあります。によると この記事 によると、プロパティの変更は約2.5倍から3倍遅くなり、メソッドの呼び出しは3.5倍から4倍遅くなるそうです。
ここで、優れた MSDN の記事 は、リフレクションをより速くする方法と、オーバーヘッドがどこにあるのかを概説しています。もっと学びたい方はぜひ読んでみてください。
リフレクションがコードに加えることができる複雑さの要素もあり、それはコードを実質的により混乱させ、それゆえ作業するのを難しくします。一部の人々は、例えば Scott Hanselman のように、リフレクションを使うことによって、解決するよりも多くの問題を作ることが多いと信じている人もいます。これは、チームがほとんどジュニア開発者である場合に特に当てはまります。
多くの動的な動作が必要な場合は、DLR (Dynamic Language Runtime) を調べたほうがよいかもしれません。.NET 4.0 での新しい変更により、ソリューションにその一部を組み込むことができるかどうかを確認することができます。VB と C# から追加された動的なサポートにより、動的なコードを非常にエレガントに使用でき、独自の動的オブジェクトをかなり簡単に作成できるようになりました。
幸運を祈ります。
EDIT: Scottのサイトをもう少し見て回ったら、こんなものがありました。 ポッドキャスト を見つけました。私はまだ聴いていませんが、しばらく聴いてみる価値があるかもしれません。
関連
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】.NETリフレクションのコストはどれくらい?