PerformanceCounter.IncrementBy(Int64) Metoda

Definicja

Zwiększa lub dekrementuje wartość skojarzonego licznika wydajności przez określoną kwotę za pomocą wydajnej operacji niepodzielnej.

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

Parametry

value
Int64

Wartość do inkrementacji według. (Wartość ujemna dekrementuje licznik).

Zwraca

Nowa wartość licznika.

Wyjątki

Licznik jest tylko do odczytu, więc aplikacja nie może jej zwiększać.

-lub-

Wystąpienie nie jest poprawnie skojarzone z licznikiem wydajności.

-lub-

Właściwość InstanceLifetime jest ustawiana na Process wartość w przypadku korzystania z globalnej pamięci udostępnionej.

Wystąpił błąd podczas uzyskiwania dostępu do interfejsu API systemu.

Przykłady

W poniższym przykładzie kodu pokazano, jak za pomocą IncrementBy metody dodać przyrosty do licznika. Ten przykładowy kod jest częścią większego przykładu PerformanceCounter dla klasy.

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

Uwagi

Można zapisywać tylko do liczników niestandardowych. Wszystkie liczniki systemowe są tylko do odczytu.

Uwaga

Metody Increment, IncrementByi Decrement używają zakleszczenia w celu zaktualizowania wartości licznika. Pomaga to zachować dokładność wartości licznika w scenariuszach wielowątkowej lub wieloprocesowych, ale także powoduje karę wydajności. Jeśli nie potrzebujesz dokładności zapewnianej przez zakleszczone operacje, możesz zaktualizować RawValue właściwość bezpośrednio do 5 razy poprawa wydajności. Jednak w scenariuszach wielowątkowych niektóre aktualizacje wartości licznika mogą być ignorowane, co powoduje niedokładne dane.

Uwaga

Jeśli wartość InstanceLifetime właściwości to Process , a kategoria licznika wydajności została utworzona z .NET Framework w wersji 1.0 lub 1.1, InvalidOperationException jest zgłaszana wartość . Kategorie liczników wydajności utworzone we wcześniejszych wersjach używają globalnej pamięci udostępnionej, a wartość parametru InstanceLifetime musi mieć wartość Global. Jeśli kategoria nie jest używana przez aplikacje działające w wersjach 1.0 lub 1.1 .NET Framework, usuń i utwórz ponownie kategorię.

Dotyczy

Bezpieczeństwo wątkowe

Ta metoda nie jest metodą o bezpiecznych wątkach.