Sdílet prostřednictvím


PerformanceCounter.IncrementBy(Int64) Metoda

Definice

Zvýší nebo sníží hodnotu přidruženého čítače výkonu o zadanou hodnotu prostřednictvím efektivní atomické operace.

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

Hodnota, o kterou se má zvýšit. (Záporná hodnota sníží čítač.)

Návraty

Nová hodnota čítače.

Výjimky

Čítač je jen pro čtení, takže ho aplikace nemůže zvýšit.

-nebo-

Instance není správně přidružena k čítači výkonu.

-nebo-

Vlastnost je nastavena InstanceLifetime na Process při použití globální sdílené paměti.

Při přístupu k rozhraní API systému došlo k chybě.

Příklady

Následující příklad kódu ukazuje, jak použít metodu IncrementBy k přidání přírůstků do čítače. Tento příklad kódu je součástí většího příkladu PerformanceCounter pro třídu.

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

Poznámky

Můžete psát jenom na vlastní čítače. Všechny systémové čítače jsou jen pro čtení.

Poznámka

Metody Increment, IncrementBya Decrement používají vzájemné uzamčení k aktualizaci hodnoty čítače. To pomáhá udržovat hodnotu čítače přesnou ve vícevláknových nebo víceprocesových scénářích, ale také má za následek penalizaci výkonu. Pokud nepotřebujete přesnost, kterou poskytují vzájemně propojené operace, můžete vlastnost aktualizovat RawValue přímo pro až 5krát vyšší výkon. Ve scénářích s více vlákny však mohou být některé aktualizace hodnoty čítače ignorovány, což vede k nepřesným datům.

Poznámka

Pokud je Process hodnota InstanceLifetime vlastnosti a kategorie čítače výkonu byla vytvořena s rozhraním .NET Framework verze 1.0 nebo 1.1, InvalidOperationException je vyvolán. Kategorie čítačů výkonu vytvořené ve starších verzích používají globální sdílenou paměť a hodnota pro InstanceLifetime musí být Global. Pokud kategorie nepoužívá aplikace spuštěné ve verzi 1.0 nebo 1.1 rozhraní .NET Framework, odstraňte a znovu vytvořte kategorii.

Platí pro

Bezpečný přístup z více vláken

Tato metoda je bezpečná pro přístup z více vláken.