DA0007: 制御フローでの例外の使用を避けてくださいDA0007: Avoid using exceptions for control flow

規則 IDRule Id DA0007DA0007
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiling methods すべてAll
メッセージMessage 多数の例外が継続してスローされています。A high number of exceptions are consistently being thrown. プログラム ロジックで例外の使用を減らすことを検討してください。Consider reducing the use of exceptions in program logic.
メッセージの種類Message type 警告Warning

サンプリング、.NET メモリ、またはリソース競合メソッドを使用してプロファイリングを行うときは、この規則を呼び出すためのサンプルを少なくとも 25 個収集する必要があります。When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 25 samples to trigger this rule.

原因Cause

.NET Framework 例外ハンドラーの多くの部分がプロファイル データで呼び出されました。A high rate of .NET Framework exception handlers were called in the profiling data. 他の制御フロー ロジックを使用して、スローされる例外の数を減らすことを検討してください。Consider using other control flow logic to reduce the number of exceptions that are thrown.

規則の説明Rule Description

例外ハンドラーを使用して、プログラム実行を中断するエラーやその他のイベントをキャッチするのは良い方法ですが、通常のプログラム実行ロジックの一部として例外ハンドラーを使用すると負荷が高くなる可能性があるため、避けてください。While the use of exception handlers to catch errors and other events that disrupt program execution is a good practice, the use of exception handler as part of the regular program execution logic can be expensive and should be avoided. ほとんどの場合、例外は、あまり発生することのない、予期しない状況に対してのみ使用する必要があります。In most cases, exceptions should be used only for circumstances that occur infrequently and are not expected.. 値を返すときに通常のプログラム フローの一部として例外を使用しないでください。Exceptions should not be used to return values as part of the typical program flow. 多くの場合、値を検証し、条件付きロジックを使用して問題の原因となっているステートメントの実行を中断することで、例外の発生を抑えることができます。In many cases, you can avoid raising exceptions by validating values and using conditional logic to halt the execution of statements that cause the problem.

詳細については、MSDN の Microsoft Patterns and Practices (マイクロソフトのパターンと手法) ライブラリの「.NET アプリケーションのパフォーマンスとスケーラビリティの向上」の第 5 章「マネージ コード パフォーマンスの向上」の「例外管理」を参照してください。For more information see the Exception Management 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 Error List window to navigate to the Marks view. .NET CLR Exceptions(@ProcessInstance)\\# of Exceps Thrown / sec の測定値が含まれる列を見つけます。Find the column that contains the .NET CLR Exceptions(@ProcessInstance)\\# of Exceps Thrown / sec measurements. 例外処理の頻度が他よりも高い特定のプログラム実行フェーズがあるかどうかを確認します。Determine if there are specific phases of program execution where exception handling is more frequent than others. サンプリング プロファイルを使用して、頻繁な例外を生成する throw ステートメントおよび try/catch ブロックを識別してください。Using a sampling profile, try to identify throw statements and try/catch blocks that generate frequent exceptions. 必要に応じて、ロジックを catch ブロックに追加すると、最も頻繁に処理されている例外を見分けることができます。If necessary, add logic to catch blocks to help you understand which exceptions are being handled most frequently. 可能な場合は、頻繁に実行される throw ステートメントまたは catch ブロックを、簡単なフロー制御ロジックまたは検証コードと置き換えてください。Where possible, replace frequently executed throw statements or catch blocks with simple flow control logic or validation code.

たとえば、アプリケーションが DivideByZeroException 例外を頻繁に処理している場合、ロジックをプログラムに追加して値が 0 の分母をチェックすると、アプリケーションのパフォーマンスが向上します。For example, if you were to find that your application was handling frequent DivideByZeroException exceptions, adding logic to your program to check for denominators with zero values will improve the performance of the application.