Share via


PerformanceCounter.IncrementBy(Int64) Méthode

Définition

Incrémente ou décrémente d'un nombre d'unités spécifique la valeur du compteur de performance associé, à l'aide d'une opération atomique efficace.

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

Paramètres

value
Int64

Valeur d'incrémentation. (Une valeur négative décrémente le compteur).

Retours

Nouvelle valeur du compteur.

Exceptions

Le compteur est en lecture seule. L'application ne peut donc pas l'incrémenter.

- ou -

L'instance n'est pas correctement associée à un compteur de performance.

- ou -

La propriété InstanceLifetime a la valeur Process lorsqu'elle utilise la mémoire partagée globale.

Une erreur s'est produite lors de l'accès à une API système.

Exemples

L’exemple de code suivant montre comment utiliser la IncrementBy méthode pour ajouter des incréments à un compteur. Cet exemple de code fait partie d’un exemple plus grand pour la PerformanceCounter classe .

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

Remarques

Vous pouvez écrire uniquement dans des compteurs personnalisés. Tous les compteurs système sont en lecture seule.

Notes

Les Incrementméthodes , IncrementByet Decrement utilisent des interlocks pour mettre à jour la valeur du compteur. Cela permet de maintenir la précision de la valeur de compteur dans les scénarios multithread ou multiprocessus, mais entraîne également une baisse des performances. Si vous n’avez pas besoin de la précision que fournissent les opérations verrouillées, vous pouvez mettre à jour la RawValue propriété directement pour une amélioration des performances jusqu’à 5 fois. Toutefois, dans les scénarios multithread, certaines mises à jour de la valeur du compteur peuvent être ignorées, ce qui entraîne des données inexactes.

Notes

Si la valeur de la InstanceLifetime propriété est Process et que la catégorie de compteurs de performances a été créée avec .NET Framework version 1.0 ou 1.1, une InvalidOperationException exception est levée. Les catégories de compteurs de performances créées avec des versions antérieures utilisent la mémoire partagée globale, et la valeur de InstanceLifetime doit être Global. Si la catégorie n’est pas utilisée par les applications s’exécutant sur les versions 1.0 ou 1.1 du .NET Framework, supprimez et recréez la catégorie.

S’applique à

Cohérence de thread

Cette méthode est thread-safe.