Condividi tramite


PerformanceCounter.IncrementBy(Int64) Metodo

Definizione

Incrementa o decrementa il valore del contatore delle prestazioni associato in base a una quantità specificata tramite un'operazione atomica efficiente.

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

Parametri

value
Int64

Valore di cui incrementare. Un valore negativo decrementa il contatore.

Valori restituiti

Nuovo valore del contatore.

Eccezioni

Il contatore è di sola lettura, quindi l'applicazione non può incrementarla.

oppure

L'istanza non è associata correttamente a un contatore delle prestazioni.

oppure

La InstanceLifetime proprietà viene impostata su Process quando si usa la memoria condivisa globale.

Si è verificato un errore durante l'accesso a un'API di sistema.

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare il IncrementBy metodo per aggiungere incrementi a un contatore. Questo esempio di codice fa parte di un esempio più ampio per la PerformanceCounter classe .

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

Commenti

È possibile scrivere solo in contatori personalizzati. Tutti i contatori di sistema sono di sola lettura.

Annotazioni

I Incrementmetodi , IncrementBye Decrement usano interlock per aggiornare il valore del contatore. Ciò consente di mantenere accurato il valore del contatore negli scenari multithreading o multiprocesso, ma comporta anche una riduzione delle prestazioni. Se non è necessaria l'accuratezza specificata dalle operazioni interlocked, è possibile aggiornare direttamente la RawValue proprietà per un massimo di 5 volte il miglioramento delle prestazioni. Tuttavia, negli scenari multithreading alcuni aggiornamenti al valore del contatore potrebbero essere ignorati, causando dati non accurati.

Annotazioni

Se il valore della InstanceLifetime proprietà è Process e la categoria del contatore delle prestazioni è stata creata con .NET Framework versione 1.0 o 1.1, viene generata un'eccezione InvalidOperationException . Le categorie di contatori delle prestazioni create con le versioni precedenti usano la memoria condivisa globale e il valore per InstanceLifetime deve essere Global. Se la categoria non viene usata dalle applicazioni in esecuzione nelle versioni 1.0 o 1.1 di .NET Framework, eliminare e ricreare la categoria.

Si applica a

Thread safety

Questo metodo è thread-safe.