我有一个WCF服务,可以更新两个性能计数器的值。第一个定义为NumberOfItems64,第二个定义为RateOfCountsPerSecond64。当我更新它们的值时(每秒执行几次),perfmon会按预期显示第一个计数器的正确值,但始终会说第二个计数器的值为0。调试代码时,我可以看到第二个计数器的RawValue属性将按预期更新。

这是我用来创建计数器的PowerShell代码:

$categoryName = "My category"

$exists = [System.Diagnostics.PerformanceCounterCategory]::Exists($categoryName)
if ($exists)
{
    [System.Diagnostics.PerformanceCounterCategory]::Delete($categoryName)
}

$counters = new-object System.Diagnostics.CounterCreationDataCollection

$counter = new-object System.Diagnostics.CounterCreationData
$counter.CounterType = [System.Diagnostics.PerformanceCounterType]::NumberOfItems64
$counter.CounterName = "# ops"
$counters.Add($counter)

$counter = new-object System.Diagnostics.CounterCreationData
$counter.CounterType = [System.Diagnostics.PerformanceCounterType]::RateOfCountsPerSecond64
$counter.CounterName = "# ops/sec"
$counters.Add($counter)

[System.Diagnostics.PerformanceCounterCategory]::Create($categoryName, $categoryName, [System.Diagnostics.PerformanceCounterCategoryType]::MultiInstance, $counters)


这是我的代码来更新计数器的值:

long value = GetValue();
counter1.IncrementBy(value);
counter2.IncrementBy(value);


我在StackOverflow上发现了这个问题,该问题与我的问题非常相似:Counter of type RateOfCountsPerSecond32 always shows 0,但不能解决我的问题。

任何的想法 ?

最佳答案

重新启动计算机后,我的代码可以按预期工作...奇怪!!!!!!!

07-25 20:21