PerformanceCounter.IncrementBy(Int64) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过有效的原子操作,使关联的性能计数器的值增加或减少指定的量。
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
要增加的值。 (负值使计数器减少。)
返回
新的计数器值。
例外
访问 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
注解
只能写入自定义计数器。 所有系统计数器都是只读的。
注意
Increment、 IncrementBy和 Decrement 方法使用互锁来更新计数器值。 这有助于在多线程或多进程方案中保持计数器值的准确性,但也会导致性能损失。 如果不需要互锁操作提供的准确性,可以直接更新 属性, RawValue 将性能提升最多 5 倍。 但是,在多线程方案中,可能会忽略计数器值的某些更新,从而导致数据不准确。
注意
如果 属性的InstanceLifetime值为 ,Process并且性能计数器类别是使用 .NET Framework 版本 1.0 或 1.1 创建的,InvalidOperationException则会引发 。 使用早期版本创建的性能计数器类别使用全局共享内存,的值 InstanceLifetime 必须为 Global。 如果.NET Framework 1.0 或 1.1 版上运行的应用程序未使用该类别,请删除并重新创建该类别。
适用于
线程安全性
此方法是线程安全的。