PerformanceCounter.IncrementBy(Int64) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.