Share via


PerformanceCounter.IncrementBy(Int64) 方法

定義

經由有效率的不可部分完成的作業,將相關的效能計數器值按指定的數量遞增或遞減。

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

參數

value
Int64

要被遞增的值 (負值會將計數器遞減)。

傳回

新的計數器值。

例外狀況

計數器是唯讀的,所以應用程式無法將其遞增。

-或-

該執行個體沒有與效能計數器正確的相關聯。

-或-

使用全域共用記憶體時,InstanceLifetime 屬性是設定為 Process

存取系統 API 時發生的錯誤。

範例

下列程式代碼範例示範如何使用 IncrementBy 方法將遞增新增至計數器。 此程式代碼範例是 類別較大範例的 PerformanceCounter 一部分。

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

備註

您只能寫入自訂計數器。 所有系統計數器都是唯讀的。

注意

IncrementIncrementByDecrement 方法會使用相互鎖定來更新計數器值。 這有助於在多線程或多進程案例中保持計數器值正確,但也會導致效能降低。 如果您不需要連結作業所提供的精確度,您可以直接更新 RawValue 屬性,以達到 5 倍的效能改善。 不過,在多線程案例中,可能會忽略計數器值的一些更新,導致數據不正確。

注意

如果 屬性的值InstanceLifetimeProcess ,而且已使用 .NET Framework 1.0 版或 1.1 版建立性能計數器類別,InvalidOperationException則會擲回 。 使用舊版所建立的效能計數器類別使用全域共用記憶體,且的值 InstanceLifetime 必須是 Global。 如果 .NET Framework 1.0 版或 1.1 版的應用程式未使用此類別,請刪除並重新建立類別。

適用於

執行緒安全性

這個方法是安全線程。