1. ホーム
  2. c#

.NETリフレクションの「コスト」とは?[重複しています]。

2023-09-06 20:32:35

質問

重複の可能性があります。

.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のサイトをもう少し見て回ったら、こんなものがありました。 ポッドキャスト を見つけました。私はまだ聴いていませんが、しばらく聴いてみる価値があるかもしれません。