Share via


성능(C# 및 Visual Basic)

성능이라는 용어는 일반적으로 프로그램의 실행 속도를 의미합니다. 경우에 따라 소스 코드의 특정 기본 규칙에 따라 실행 속도를 높일 수 있습니다. 코드를 자세히 검사한 후 프로파일러를 사용하여 최대한 빠른 속도로 실행해야 하는 프로그램도 있으며, 코드가 작성된 대로 적합한 속도로 실행되므로 최적화를 수행하지 않아도 되는 프로그램도 있습니다.

성능을 측정하여 최적화하는 경우 다음과 같은 일반적인 지침을 따라야 합니다.

  • 성능 목표를 세운 다음 프로그램의 성능을 측정하여 코드가 목표를 충족하지 않는 시기를 결정합니다.

  • 처음에는 정확하며 좋은 디자인 원칙에 따라 의도를 명확하게 반영하는 코드를 작성합니다. 그런 다음 성능 목표를 충족하지 못하는 경우에만 최적화를 수행합니다. 성능이 최적화된 코드는 읽고 관리하기가 더 어렵습니다. 작성할 수 있는 가장 최적화된 코드보다 약간 느리더라도 읽기 쉽고, 강력하며, 유지 가능한 코드를 작성하는 것이 대개 좋습니다.

  • 최적화를 수행해야 하는 경우에는 프로그램의 가장 느린 부분부터 시작합니다. 프로그램이 성능 목표를 충족하지 못하는 것으로 결정되는 경우 성능을 향상시킬 수 있고 성능이 문제의 주요 원인이 되는 특정 위치를 식별하십시오. 거의 호출되지 않는 메서드를 최적화하거나, 메서드 B를 다른 스레드에서 실행하기 위해 프로그램 전체적으로 30초를 대기하는 경우 메서드 A를 50밀리초 미만으로 실행하기 위해 최적화하는 것은 대개 의미가 없습니다.

boxing 및 unboxing

System.Collections.ArrayList 같은 제네릭이 아닌 컬렉션 클래스의 예와 같이 많은 수의 boxing이 필요한 경우에는 값 형식을 사용하지 않는 것이 좋습니다. System.Collections.Generic.List<T> 같은 제네릭 컬렉션을 사용하면 값 형식의 boxing을 방지할 수 있습니다. boxing 및 unboxing 과정에는 많은 처리 작업이 필요합니다. 값 형식을 boxing할 때는 완전히 새로운 개체가 만들어져야 하며, 이러한 작업은 간단한 참조 할당보다 최대 20배의 시간이 걸립니다. unboxing을 할 때는 캐스팅 과정에 할당 작업보다 4배의 시간이 걸릴 수 있습니다. 자세한 내용은 Boxing 및 Unboxing을 참조하십시오.

문자열

예를 들어, 자주 반복되는 루프에서 많은 수의 문자열 변수를 연결하는 경우 C# + operator 또는 Visual Basic 연결 연산자 대신 System.Text.StringBuilder를 사용합니다. 자세한 내용은 방법: 여러 문자열 연결(C# 프로그래밍 가이드)Visual Basic의 연결 연산자을 참조하십시오.

소멸자

빈 소멸자는 사용하지 않는 것이 좋습니다. 클래스에 소멸자가 있으면 종료 큐에 항목이 만들어집니다. 소멸자가 호출되면 큐 처리를 위해 가비지 수집기가 호출됩니다. 그러므로 빈 소멸자는 성능 저하를 가져올 뿐입니다. 자세한 내용은 소멸자(C# 프로그래밍 가이드)개체 수명: 개체가 만들어지고 소멸되는 방법(Visual Basic)을 참조하십시오.

기타 리소스

참고 항목

개념

C# 프로그래밍 가이드

기타 리소스

프로그래밍 개념

Visual Basic 프로그래밍 가이드