DA0007: 제어 흐름에는 예외를 사용하지 마십시오.DA0007: Avoid using exceptions for control flow

규칙 IDRule Id DA0007DA0007
범주Category .NET Framework 사용.NET Framework Usage
프로파일링 방법Profiling methods 모두All
메시지Message 많은 예외가 지속적으로 throw되고 있습니다.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. throw되는 예외 수를 줄일 때 다른 제어 흐름 논리를 사용해 보세요.Consider using other control flow logic to reduce the number of exceptions that are thrown.

규칙 설명Rule Description

오류와 프로그램 예외를 중단하는 다른 이벤트를 catch할 때 예외 처리기를 사용하는 것이 좋지만 예외 처리기를 일반 프로그램 실행 논리의 일부로 사용하는 것은 부담이 클 수 있으므로 피해야 합니다.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. 가능할 경우 빈번히 실행되는 thorw 문이나 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.