PerformanceCounter.IncrementBy(Int64) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.