방법: 성능 카운터 샘플 검색
업데이트: 2007년 11월
CounterSample 클래스를 사용하여 샘플을 만들고 그 내용에 대해 계산을 수행할 수 있습니다. 샘플 클래스는 사용자가 정의한 조건에 따라 성능 카운터의 "샘플링"을 수행합니다. 이 조건에는 한 개 이상의 카운터 값과 값이 제공되어야 할 빈도가 포함됩니다. 또한 이 클래스에서는 샘플을 가져온 시간을 기록합니다. 인스턴스화된 하나의 클래스에서 이러한 데이터를 모두 수집한 다음 Calculate 메서드를 사용하여 계산을 수행할 수 있습니다. 또한 Calculate 메서드를 사용하여 2개의 서로 다른 샘플에 있는 값을 비교하는 계산을 수행할 수도 있습니다.
수행되는 계산은 카운터의 형식에 따라 다릅니다. 일부 카운터 형식에는 카운터와 관련된 특정 계산 방식이 있습니다. 예를 들어, ElapsedTime 형식의 카운터에서는 2개의 서로 다른 샘플에 있는 타임스탬프를 비교하여 경과된 시간을 확인합니다. 반면에 대부분의 카운터에서는 검색한 데이터를 기준으로 평균 계산을 수행합니다.
다음은 샘플 정의를 완료하는 단계입니다.
CounterSample 클래스의 인스턴스를 한 개 이상 만듭니다.
각 인스턴스의 현재 샘플을 검색합니다.
Calculate 메서드를 호출하여 계산에 포함할 각 샘플을 매개 변수로 전달합니다.
성능 카운터 샘플을 검색하고 계산을 수행하려면
PerformanceCounter 인스턴스를 만들고 원하는 범주 및 카운터와 상호 작용하도록 구성합니다. 자세한 내용은 방법: PerformanceCounter 구성 요소 인스턴스 만들기 또는 방법: PerformanceCounter 구성 요소 인스턴스 구성을 참조하십시오.
샘플링 결과를 저장할 CounterSample 클래스의 인스턴스를 만듭니다.
PerformanceCounter 구성 요소 인스턴스의 NextSample 메서드를 호출하여 계산된 값을 검색하고 CounterSample 클래스에 결과를 할당합니다.
팁: 계산을 수행하려면 2개의 샘플을 검색해야 합니다.
계산 결과를 저장할 변수를 만들고 Single 데이터 형식으로 지정합니다.
계산해야 할 2개의 샘플에 대해 각각 CounterSample 형식의 변수에 NextSample의 반환 값을 할당합니다.
CounterSample 클래스의 Calculate 메서드를 호출하고 다음 두 가지 작업 중 하나를 수행합니다.
2개의 샘플을 검색한 경우 CounterSample 개체로 저장된 두 샘플을 Calculate 메서드에 매개 변수로 전달합니다.
한 개의 샘플만 검색한 경우 첫 번째 샘플을 Calculate 메서드에 전달한 다음 두 번째 매개 변수를 사용하여 다른 샘플을 검색합니다.
결과를 포함시키려고 만든 변수와 동일하게 계산 결과를 설정합니다.
참고: 2개의 샘플은 동일한 형식의 카운터에서 가져와야 합니다. 그렇지 않으면 메서드가 예외를 throw합니다. 카운터의 형식에 따라 수행되는 계산의 종류가 결정됩니다. 자세한 내용은 성능 카운터 형식을 참조하십시오.
다음 코드에서는 Calculate 메서드를 사용하여 2개의 샘플을 검색하고 비교하는 방법을 보여 줍니다.
' Dim variables of types CounterSample for each sample and a ' variable of type single for the results. Dim sample1 As CounterSample Dim sample2 As CounterSample Dim result As Single ' Retrieve a sample. sample1 = PerformanceCounter1.NextSample() ' Wait some interval of time here and retrieve ' a second sample. System.Threading.Thread.Sleep(1000) sample2 = PerformanceCounter1.NextSample() ' Pass both samples to the Calculate method. result = CounterSample.Calculate(sample1, sample2)
System.Diagnostics.CounterSample sample1; System.Diagnostics.CounterSample sample2; float result; // Retrieve a sample. sample1 = PerformanceCounter1.NextSample(); // Wait some interval of time here and retrieve // a second sample. System.Threading.Thread.Sleep(1000); sample2 = PerformanceCounter1.NextSample(); // Pass both samples to the Calculate method. result = System.Diagnostics.CounterSample.Calculate(sample1, sample2);
또는 NextSample 메서드를 호출하여 두 번째 샘플에 값을 제공할 수도 있습니다. 다음 예제에서는 이 방법을 사용합니다.
Dim sample1 As CounterSample Dim result As Single ' Retrieve a single sample. sample1 = PerformanceCounter1.NextSample() ' Pass the retrieved sample to the calculate method ' and retrieve another sample in the second parameter. result = CounterSample.Calculate(sample1, PerformanceCounter1.NextSample())
System.Diagnostics.CounterSample sample1; float result; // Retrieve a single sample. sample1 = PerformanceCounter1.NextSample(); // Pass the retrieved sample to the calculate method // and retrieve another sample in the second parameter. result = System.Diagnostics.CounterSample.Calculate(sample1, PerformanceCounter1.NextSample());