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
Комментарии
Запись можно выполнять только в пользовательские счетчики. Все системные счетчики доступны только для чтения.
Примечание
Методы Increment, IncrementByи Decrement используют блокировки для обновления значения счетчика. Это помогает сохранить точное значение счетчика в многопоточных или многопроцессных сценариях, но также приводит к повышению производительности. Если вам не нужна точность, обеспечиваемая взаимоблокируемыми операциями, можно обновить RawValue свойство напрямую, чтобы повысить производительность в 5 раз. Однако в многопоточных сценариях некоторые обновления значения счетчика могут игнорироваться, что приводит к неточным данным.
Примечание
Если свойство имеет значение InstanceLifetime , Process а категория счетчика производительности была создана с платформа .NET Framework версии 1.0 или 1.1, создается исключение InvalidOperationException . Категории счетчиков производительности, созданные в более ранних версиях, используют глобальную общую память, а значение для InstanceLifetime должно иметь значение Global. Если категория не используется приложениями, работающими в версии 1.0 или 1.1 платформа .NET Framework, удалите и повторно создайте категорию.
Применяется к
Потокобезопасность
Этот метод является потокобезопасным.