2017-04-26 4 views
2

C#의 "PerformanceCounter"클래스를 사용하여 "메모리"범주에서 "사용 가능한 바이트"및 "사용중인 바이트 비율"을 계산합니다. PerformanceCounter의 모든 범주에서 모든 카운터를 계산하는 균일 한 방법이 있습니까?

  PerformanceCounter pc = new PerformanceCounter("Memory", "Available Bytes", true); 
     PerformanceCounter pc1 = new PerformanceCounter("Memory", "% Committed Bytes In Use", true); 

     var a = pc.RawValue; 
     var b = pc1.NextValue(); 

내가 여기보고 있어요 문제

는 "RawValue"는 "NextValue는()" "% 커밋 된 바이트 사용 중"카운터에 사용되는 반면, "사용 가능한 바이트"카운터에 사용되는 것입니다.

두 카운터 또는 모든 카운터를 계산하는 균일 한 방법이 있습니까?

답변

1

범주마다 다른 카운터 유형이 있기 때문에 카테고리마다 다릅니다. PerformanceCounter.CounterType 속성은 카운터가 보유하고있는 데이터 형식과 데이터 계산 방법을 정의합니다. 측정 값을 다른 클라이언트가 다른 시간대에 측정 할 수 있기 때문에 시간 경과에 따른 차이를 측정하는 카운터가 원시 값의 차이를 갖지 않는 것은 의미가 없습니다. 다양한 유형에 대한 자세한 내용은 Performance Counter Type Enumeration을 참조하십시오.각 유형의 작동 방식에 대해 자세히 알고 싶다면이 모든 것이 기반이되는 Win32 설명서를 사용해야합니다. 이전에는이 ​​모든 것을 담은 단일 페이지가 있었지만 지금은 그 페이지를 찾는 데 어려움을 겪고 있습니다. 가장 가까운 곳은 https://technet.microsoft.com/en-us/library/cc960029.aspx입니다. 일부 성능 카운터 유형은 기본 카운터와 "기본"카운터를 사용하고 각각의 현재 및 이전 원시 값을 기반으로 한 수식을 사용하여 NextValue()을 계산합니다. RawValue may 은 계산 된 값과 같은 방식으로 해석하는 것이 적절하지 않기 때문에 특정 카운터 유형에 대해 유효하지 않은 것으로 표시됩니다. 예를 들어, 프로세스에 사용 된 % CPU에 대한 IIRC는 원시 값이 프로그램 시작 이후 사용 된 CPU 틱의 수입니다. 백분율로 해석하면 넌센스입니다. 이전 값과 경과 시간과 비교했을 때만 의미가 있습니다 (가능한 최대 변경을 추론 할 수도 있음).

RawValue을 사용하면 일부 카운터에는 적합하지만 다른 카운터에는 적합하지 않습니다. 그러나 NextValue()은 처음 샘플을 호출 할 때 의미있는 값을 반환 할 수없는 경우가 있습니다. 샘플 간의 차이로 계산 될 때 이전 샘플을 비교할 수 없기 때문입니다. 이를 무시하거나 시작할 때 코드를 한 번 호출하여 후속 호출이 실제 값을 얻도록 코드를 설정할 수 있습니다. NextValue()은 타이머에서 호출 될 것으로 예상됩니다. 예를 들어 Network Bytes Sent 카운터에서 호출하는 경우 이전 호출과 이번 호출 사이에 보낸 바이트 수를 반환합니다. 따라서 예를 들어 초기 통화 후 2 초 후 다시 2 분 후에 Network Bytes Sent 카운터에 NextValue()을 호출하면 2 초 후에 통화가 끊어지기 때문에 네트워크 전송이 안정적이라도 매우 다른 값을 얻게됩니다 전송 된 바이트 수를 2 초로 반환하고, 2 분 후 호출은 2 분 안에 전송 된 바이트 수를 반환합니다.

간단히 말해서 모든 카운터 유형에 NextValue()을 사용할 수 있지만 반환 된 첫 번째 값을 버리거나 무시해야하며 일정한 간격으로 NextValue()을 호출해야 결과를 알 수 있습니다 (대화식 Windows 성능 모니터 프로그램 않습니다.

1

제 경험상 대개 MSDN 설명서에 따르면 성능 카운터 범주마다 다르며 특정 속성 (예 : Available Bytes 또는 % Committed) 속성에 따라 다릅니다.

당신이 찾고있는 것이 무엇일까? NextSample()입니다.

Perf Counter

특성 : RawValue

가져 오거나이 카운터의 원료 또는 계산되지 않은, 값을 설정한다.

그것을 만든 개발자의 몫 반드시 아니라고^의미.

메소드 : NextValue()

이의 샘플을 취득하고, 계산 된 값을 반환한다.

^그것을 만든 개발자에게 달려 있음을 의미합니다.

방법 : NextSample()

는 카운터 샘플을 수집하고이를위한 원료, 또는 계산되지 않은, 값을 반환합니다.

오래전에 나에게 설명 된 내용이기도하므로 RawValue의 개념은 항상 유효하지 않습니다.

샘플을 생성하는 데 RawValues가 사용됩니다. NextSample() 또는 샘플은 시간 경과에 따른 RawValues의 평균입니다 (훨씬 현실적입니다). NextValue()는 값의 컨텍스트와 개발자의 구현에 따라 % 또는 바이트에서 킬로바이트로 변환 된 샘플을 정리합니다.

정보가 10 년 이상 되었더라도 RawValue의 사용을 포기하고 그 자리에서 NextSample()을 사용하는 것입니다. 사실적이고 정확한 값이 필요합니다.

관련 문제