次の方法で共有


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

注釈

カスタム カウンターにのみ書き込むことができます。 すべてのシステム カウンターは読み取り専用です。

注意

IncrementBy、および Decrement メソッドはIncrement、インターロックを使用してカウンター値を更新します。 これにより、マルチスレッドまたはマルチプロセスのシナリオでカウンター値を正確に保つことができますが、パフォーマンスが低下します。 インターロックされた操作で提供される精度が必要ない場合は、プロパティを RawValue 直接更新して、最大 5 倍のパフォーマンス向上を実現できます。 ただし、マルチスレッドのシナリオでは、カウンター値の一部の更新が無視され、データが不正確になる可能性があります。

注意

プロパティの値InstanceLifetimeが でProcess、パフォーマンス カウンター カテゴリがバージョン 1.0 または 1.1 .NET Framework作成された場合は、 InvalidOperationException がスローされます。 以前のバージョンで作成されたパフォーマンス カウンター カテゴリではグローバル共有メモリが使用され、 の InstanceLifetime 値は である Global必要があります。 .NET Frameworkのバージョン 1.0 または 1.1 で実行されているアプリケーションでカテゴリが使用されていない場合は、カテゴリを削除して再作成します。

適用対象

スレッド セーフ

このメソッドはスレッド セーフです。