다음을 통해 공유


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 일부입니다.

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 할 수 있습니다. 그러나 다중 스레드 시나리오에서는 카운터 값에 대한 일부 업데이트가 무시되어 부정확한 데이터가 발생할 수 있습니다.

메모

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

적용 대상

스레드 보안

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