다음을 통해 공유


PerformanceCounter.IncrementBy(Int64) 메서드

정의

효율적인 원자 단위 연산을 통해 관련 성능 카운터의 값을 지정한 양 만큼 증가 또는 감소시킵니다.

public:
 long IncrementBy(long value);
public long IncrementBy (long value);
member this.IncrementBy : int64 -> int64
Public Function IncrementBy (value As Long) As Long

매개 변수

value
Int64

증분 값입니다. (음수 값은 카운터를 감소시킵니다.)

반환

새 카운터 값입니다.

예외

카운터는 읽기 전용이므로 애플리케이션에서 카운터를 증가시킬 수 없는 경우

또는

인스턴스가 성능 카운터와 제대로 연결되어 있지 않은 경우

또는

전역 공유 메모리를 사용할 때 InstanceLifetime 속성이 Process로 설정되어 있습니다.

시스템 API에 액세스할 때 오류가 발생했습니다.

예제

다음 코드 예제를 사용 IncrementBy 하는 방법에 설명 합니다 카운터에 증분을 추가 하는 방법입니다. 이 코드 예제는 클래스에 대한 더 큰 예제의 PerformanceCounter 일부입니다.

void CollectSamples( ArrayList^ samplesList, PerformanceCounter^ PC, PerformanceCounter^ BPC )
{
   Random^ r = gcnew Random( DateTime::Now.Millisecond );

   // Loop for the samples.
   for ( int j = 0; j < 100; j++ )
   {
      int value = r->Next( 1, 10 );
      Console::Write( "{0} = {1}", j, value );
      PC->IncrementBy( value );
      BPC->Increment();
      if ( (j % 10) == 9 )
      {
         OutputSample( PC->NextSample() );
         samplesList->Add( PC->NextSample() );
      }
      else
            Console::WriteLine();
      System::Threading::Thread::Sleep( 50 );
   }
}
private static void CollectSamples(ArrayList samplesList)
{

    Random r = new Random( DateTime.Now.Millisecond );

    // Loop for the samples.
    for (int j = 0; j < 100; j++)
    {

        int value = r.Next(1, 10);
        Console.Write(j + " = " + value);

        avgCounter64Sample.IncrementBy(value);

        avgCounter64SampleBase.Increment();

        if ((j % 10) == 9)
        {
            OutputSample(avgCounter64Sample.NextSample());
            samplesList.Add( avgCounter64Sample.NextSample() );
        }
        else
        {
            Console.WriteLine();
        }

        System.Threading.Thread.Sleep(50);
    }
}
Private Shared Sub CollectSamples(ByVal samplesList As ArrayList)

    Dim r As New Random(DateTime.Now.Millisecond)

    ' Loop for the samples.
    Dim j As Integer
    For j = 0 To 99

        Dim value As Integer = r.Next(1, 10)
        Console.Write(j.ToString() + " = " + value.ToString())

        avgCounter64Sample.IncrementBy(value)

        avgCounter64SampleBase.Increment()

        If j Mod 10 = 9 Then
            OutputSample(avgCounter64Sample.NextSample())
            samplesList.Add(avgCounter64Sample.NextSample())
        Else
            Console.WriteLine()
        End If
        System.Threading.Thread.Sleep(50)
    Next j
End Sub

설명

사용자 지정 카운터에만 쓸 수 있습니다. 모든 시스템 카운터는 읽기 전용입니다.

참고

, IncrementByDecrement 메서드는 Increment인터록을 사용하여 카운터 값을 업데이트합니다. 이렇게 하면 다중 스레드 또는 다중 프로세서 시나리오에서 카운터 값을 정확하게 유지할 수 있지만 성능 저하도 발생합니다. 연동 작업이 제공하는 정확도가 필요하지 않은 경우 최대 5배 성능 향상을 위해 속성을 직접 업데이트 RawValue 할 수 있습니다. 그러나 다중 스레드 시나리오에서는 카운터 값에 대한 일부 업데이트가 무시되어 부정확한 데이터가 발생할 수 있습니다.

참고

속성 값이 InstanceLifetimeProcess 고 .NET Framework 버전 1.0 또는 1.1을 사용하여 성능 카운터 범주를 만든 경우 가 InvalidOperationException throw됩니다. 이전 버전으로 만든 성능 카운터 범주는 전역 공유 메모리를 사용하며 의 값 InstanceLifetime 은 이어야 Global합니다. 버전 1.0 또는 1.1의.NET Framework에서 실행 중인 애플리케이션 범주를 사용 하지 않으면 삭제 하 고 범주를 다시 만듭니다.

적용 대상

스레드 보안

이 메서드는 스레드로부터 안전합니다.