Freigeben über


PerformanceCounter.IncrementBy(Int64) Methode

Definition

Inkrementiert oder dekrementiert durch eine effiziente atomare Operation den Wert des zugeordneten Leistungsindikators um einen angegebenen Betrag.

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

Parameter

value
Int64

Der Wert, um den inkrementiert werden soll. (Durch einen negativen Wert wird der Zähler dekrementiert.)

Gibt zurück

Der neue Zählerwert.

Ausnahmen

Der Zähler ist schreibgeschützt, sodass er von der Anwendung nicht inkrementiert werden kann.

- oder -

Die Instanz ist keinem Leistungsindikator ordnungsgemäß zugeordnet.

- oder -

Die InstanceLifetime-Eigenschaft wird auf Process festgelegt, wenn der globale gemeinsam genutzte Speicherbereich verwendet wird.

Beim Zugreifen auf eine System-API ist ein Fehler aufgetreten.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie die IncrementBy -Methode verwenden, um einem Zähler Inkremente hinzuzufügen. Dieses Codebeispiel ist Teil eines größeren Beispiels für die PerformanceCounter -Klasse.

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

Hinweise

Sie können nur in benutzerdefinierte Leistungsindikatoren schreiben. Alle Systemindikatoren sind schreibgeschützt.

Hinweis

Die IncrementMethoden , IncrementBy, und Decrement verwenden Interlocks, um den Zählerwert zu aktualisieren. Dies trägt dazu bei, dass der Zählerwert in Multithread- oder Mehrverarbeitungsszenarien genau bleibt, aber auch zu Leistungseinbußen führt. Wenn Sie nicht die Genauigkeit benötigen, die interlocked-Vorgänge bieten, können Sie die Eigenschaft direkt aktualisieren, um eine RawValue bis zu fünffache Leistungsverbesserung zu erzielen. In Multithreadszenarien können jedoch einige Aktualisierungen des Zählerwerts ignoriert werden, was zu ungenauen Daten führt.

Hinweis

Wenn der Wert für die InstanceLifetime Eigenschaft ist Process und die Leistungsindikatorkategorie mit .NET Framework Version 1.0 oder 1.1 erstellt wurde, wird ein InvalidOperationException ausgelöst. Leistungsindikatorkategorien, die mit früheren Versionen erstellt wurden, verwenden globalen freigegebenen Arbeitsspeicher, und der Wert für muss sein InstanceLifetimeGlobal. Wenn die Kategorie nicht von Anwendungen verwendet wird, die unter Version 1.0 oder 1.1 der .NET Framework ausgeführt werden, löschen Sie die Kategorie, und erstellen Sie sie neu.

Gilt für:

Threadsicherheit

Diese Methode ist threadsicher.