DA0012: リフレクションが頻繁に実行されています
規則 ID |
DA0012 |
[カテゴリ] |
.NET Framework の使用 |
プロファイル方法 |
サンプリング |
Message |
リフレクションを使いすぎている可能性があります。これは負荷が高い操作です。 |
規則の種類 |
[警告] |
原因
System.Reflection メソッド (InvokeMember や GetMember など) または Type メソッド (MemberInvoke など) の呼び出しが、プロファイル データの大きな割合を占めています。可能な場合は、事前バインディングを使用するこれらのメソッドを、依存アセンブリのメソッドに置き換えることを検討してください。
規則の説明
リフレクションは、.NET Framework の柔軟な機能です。この機能は、依存ランタイム アセンブリに対してアプリケーションの遅延バインディングを実行したり、実行時に新しい型を作成して動的に実行する場合に使用できます。ただし、この手法は頻繁に使用したり短いループで呼び出したりすると、パフォーマンスが低下する可能性があります。
詳細については、MSDN にある Microsoft patterns & practices ライブラリの「パフォーマンスとスケーラビリティの向上」で、「第 5 章 「マネージ コード パフォーマンスの向上」」の「リフレクションと遅延バインディング」を参照してください。
警告の調査方法
[エラー一覧] ウィンドウに表示されたメッセージをダブルクリックして、プロファイル データの 関数の詳細ビュー に移動します。System.Type メソッドまたは System.Reflection メソッドの呼び出し関数を調べ、.NET リフレクション API を最も頻繁に使用するプログラムのセクションを見つけます。メタデータを返すメソッドは使用しないでください。アプリケーションのパフォーマンスを重視する場合、状況によっては遅延バインディングの使用と、実行時の動的な型の作成を行わないようにする必要があります。