DA0012: リフレクションが頻繁に実行されていますDA0012: Significant amount of Reflection

規則 IDRule Id DA0012DA0012
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiling methods サンプリングSampling
メッセージMessage リフレクションを使いすぎている可能性があります。You may be using Reflection excessively. これは負荷が高い操作です。It is an expensive operation.
規則の種類Rule type 警告Warning

原因Cause

InvokeMember および GetMember などの System.Reflection メソッドまたは MemberInvoke などの Type メソッドへの呼び出しが、プロファイリング データの大きな割合を占めています。Calls to the System.Reflection methods such as InvokeMember and GetMember or to Type methods such as MemberInvoke are a significant proportion of the profiling data. 可能な場合は、事前バインディングを使用するこれらのメソッドを、依存アセンブリのメソッドに置き換えることを検討してください。When possible, consider replacing these methods with early binding to the methods of dependent assemblies.

規則の説明Rule Description

リフレクションは、.NET Framework の柔軟な機能です。この機能は、依存ランタイム アセンブリに対してアプリケーションの遅延バインディングを実行したり、実行時に新しい型を作成して動的に実行する場合に使用できます。Reflection is a flexible facility of the .NET Framework that can be used to perform late binding of your application to a dependent run-time Assembly or to create and dynamically execute new types during run-time. ただし、この手法は頻繁に使用したり短いループで呼び出したりすると、パフォーマンスが低下する可能性があります。However, these techniques can decrease performance if they are used frequently or called in tight loops.

詳細については、MSDN の Microsoft Patterns and Practices (マイクロソフトのパターンと手法) ライブラリの「.NET アプリケーションのパフォーマンスとスケーラビリティの向上」の第 5 章「マネージ コード パフォーマンスの向上」の「リフレクションと遅延バインディング」を参照してください。For more information, see the Reflection and Late Binding section of Chapter 5 — Improving Managed Code Performance in the Improving .NET Application Performance and Scalability volume of the Microsoft Patterns and Practices library on MSDN.

警告の調査方法How to Investigate a Warning

[エラー一覧] ウィンドウに表示されたメッセージをダブルクリックして、プロファイル データの関数の詳細ビューに移動します。Double-click the message in the Errors List window to navigate to the Function Details View of the profiling data. System.Type メソッドまたは System.Reflection メソッドの呼び出し関数を調べ、.NET リフレクション API を最も頻繁に使用するプログラムのセクションを見つけます。Examine the calling functions of the System.Type or System.Reflection method to find the sections of the program that make the most frequent use of .NET Reflection APIs. メタデータを返すメソッドは使用しないでください。Avoid using methods that return metadata. アプリケーションのパフォーマンスが重大である場合、状況によっては遅延バインディングの使用と、実行時の動的な型の作成を行わないようにする必要があります。When the performance of your application is critical, you might need to avoid using late binding and creating types dynamically at run-time.