2011-02-03 3 views
3

함수 및 클래스의 속도를 측정하는 가장 좋은 방법은 무엇입니까? 모든 함수마다 다양한 솔루션이 있으며 실행 속도를 측정하고 최상의 솔루션으로 공유 클래스를 최적화하는 방법을 알고 싶습니다.함수, 클래스 및 프로세스의 속도를 측정하는 가장 좋은 방법

또한 저장 프로 시저, 선택, 뷰 등의 차이점과 같은 SQL 속도를 어떻게 측정합니까?

답변

4

두 가지 옵션이 있습니다.

구체적인 방법은 System.Diagnostics.Stopwatch을 사용하십시오.

이 코드는 .NET의 고해상도 타이머로 코드의 특정 부분에 사용할 수 있습니다.

전체 응용 프로그램의 성능을 측정해야하는 경우 프로파일 러를 사용하십시오.

Visual Studio의 Ultra 버전의 빌드 인 또는 EQATEC과 같은 도구를 사용할 수 있습니다.

+0

더 간단 할수록 좋습니다 –

1

프로파일 러를 사용하는 것이 가장 좋습니다. 벽시계 실행 시간을 측정 할 때의 문제점 (예 : Stopwatch 클래스로 측정)은 통제 범위를 벗어나는 여러 요인의 영향을받습니다. 이러한 요소를 언급하기 위해 네트워크 및 기타 I/O 대기 시간과 운영 체제 스케줄러 결정이있어 응용 프로그램 및 스레드의 상대적 우선 순위에 영향을줍니다. 가상화 된 환경에서 실행중인 경우 밀리 초 범위의 벽시계 측정에 비교적 큰 영향을 미칠 수 있습니다. 프로파일 러는 완벽하지는 않지만 실제로 코드를 실행하는 데 실제로 소요 된 시간을 더 잘 파악할 수 있습니다.

게다가 좋은 프로파일 러는 코드가 실행 중 사용하는 메모리 양과 같은 유용한 메트릭을 제공 할 수 있습니다.

0

측정 및 최적화의 목표를 혼동하지 않는 것이 가장 좋습니다. 그것들은 다른 작업입니다. 측정은 무언가를 수정 한 결과를 정량화하는 데 좋지만 수정해야 할 부분을 알려주는 데는 부족합니다.

측정 대상에서, 내가 얼마나 빠른지에 대한 프레젠테이션을 만들고 싶다면 통제 된 환경과 좋은 초시계가 필요합니다. 그러나 최적화를 위해 원유 측정 (1000 회 실행과 같은)과 간단한 타이머 사용이 그 이상의 것입니다.

최적화 주제에서 속도와 관련이 없습니다. 불필요한 활동에 관심이 있습니다. 코드를 찾기 위해 고속으로 실행할 필요는 없습니다.

프로그램을 실행하면 호출 트리를 추적합니다. 최적화는 최대한 많은 나뭇잎 (지침)과 과일 (I/O)을 최대한 많이 제거하는 것으로 구성됩니다. 이 작업을 수행하는 좋은 방법은 전체 분기를 제거하는 것입니다. 모든하지만 작은 프로그램에서

  • 는 최적화를위한 전형적인 기회가 하나가 그들로부터 호출 트리 콩나물 얼마나 실현 (함수가 호출 코드 라인이 아닌 기능 자체) 호출 포인트 즉, 구성 , 정말 다른 방법으로 할 수 있습니다. 순진한 코드 줄 하나가 전체 트리의 상당 부분을 담당 할 수 있으므로 코드를 잘라낼 수 있습니다.

이러한 것을 찾으려면 벽 시계 시간 스택 샘플링이 가장 좋은 방법이라고 생각합니다. 이 작업이 효율적인 프로세스 일 필요는 없으며 샘플 수는 비교적 적고 많은 수의 샘플보다 잘 작동합니다. 처음 작성된 프로그램에는 속도 향상을위한 기회가 하나도 없기 때문에 반복적으로 수행해야합니다. 그것은 여러 가지를 포함합니다. Here's an example.

관련 문제