PerformanceCounter.IncrementBy(Int64) Metoda

Definicja

Zwiększa lub zmniejsza wartość skojarzonego licznika wydajności o określoną wartość za pomocą wydajnej operacji niepodzielnej.Increments or decrements the value of the associated performance counter by a specified amount through an efficient atomic operation.

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 zwiększenia przez.The value to increment by. (Wartość ujemna zmniejsza licznik).(A negative value decrements the counter.)

Zwraca

Int64

Nowa wartość licznika.The new counter value.

Wyjątki

Licznik jest tylko do odczytu, więc aplikacja nie może go zwiększyć.The counter is read-only, so the application cannot increment it.

-lub--or- Wystąpienie nie jest poprawnie skojarzone z licznikiem wydajności.The instance is not correctly associated with a performance counter.

-lub--or- InstanceLifetimeWłaściwość jest ustawiona na, Process gdy używana jest globalna pamięć współdzielona.The InstanceLifetime property is set to Process when using global shared memory.

Wystąpił błąd podczas uzyskiwania dostępu do interfejsu API systemu.An error occurred when accessing a system API.

Przykłady

Poniższy przykład kodu demonstruje sposób użycia IncrementBy metody w celu dodania przyrostów do licznika.The following code example demonstrates how to use the IncrementBy method to add increments to a counter. Ten przykład kodu jest częścią większego przykładu dla PerformanceCounter klasy.This code example is part of a larger example for the PerformanceCounter class.

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 pisać tylko do liczników niestandardowych.You can write only to custom counters. Wszystkie liczniki systemu są tylko do odczytu.All system counters are read-only.

Uwaga

IncrementMetody, IncrementBy i Decrement służą do aktualizowania wartości licznika.The Increment, IncrementBy, and Decrement methods use interlocks to update the counter value. Dzięki temu wartość licznika jest poprawna w scenariuszach wielowątkowych lub wielowątkowych, ale również powstaje spadek wydajności.This helps keep the counter value accurate in multithreaded or multiprocess scenarios, but also results in a performance penalty. Jeśli nie potrzebujesz dokładności zapewnianej przez operacje wykonywane w sposób niezbędny, możesz zaktualizować RawValue Właściwość bezpośrednio przez maksymalnie 5 razy zwiększenie wydajności.If you do not need the accuracy that interlocked operations provide, you can update the RawValue property directly for up to a 5 times performance improvement. Jednak w scenariuszach wielowątkowych niektóre aktualizacje wartości licznika mogą zostać zignorowane, co spowodowało niedokładne dane.However, in multithreaded scenarios, some updates to the counter value might be ignored, resulting in inaccurate data.

Uwaga

Jeśli wartość InstanceLifetime właściwości jest Process i została utworzona kategoria licznika wydajności z .NET Framework wersja 1,0 lub 1,1, InvalidOperationException zostanie zgłoszony.If the value for the InstanceLifetime property is Process and the performance counter category was created with .NET Framework version 1.0 or 1.1, an InvalidOperationException is thrown. Kategorie licznika wydajności utworzone przy użyciu wcześniejszych wersji używają globalnej pamięci współdzielonej, a wartość parametru InstanceLifetime musi być równa Global .Performance counter categories created with earlier versions use global shared memory, and the value for InstanceLifetime must be Global. Jeśli kategoria nie jest używana przez aplikacje działające w wersji 1,0 lub 1,1 .NET Framework, Usuń i Utwórz ponownie kategorię.If the category is not used by applications running on versions 1.0 or 1.1 of the .NET Framework, delete and recreate the category.

Dotyczy

Bezpieczeństwo wątkowe

Ta metoda nie jest metodą o bezpiecznych wątkach.This method is thread safe.