blo*_*art 5 c# performancecounter
我必须在这里做错事.我创建一个自定义性能计数器如下:
string counterCategory = "Test Category";
string counterName = "Test Counter";
if (!PerformanceCounterCategory.Exists(counterCategory))
{
Console.WriteLine("Creating Counters");
CounterCreationDataCollection counterCreationDataCollection =
new CounterCreationDataCollection();
counterCreationDataCollection.Add(
new CounterCreationData(counterName,
"Description",
PerformanceCounterType.NumberOfItems32)
);
PerformanceCounterCategory.Create(counterCategory,
"My category description/Help",
PerformanceCounterCategoryType.SingleInstance,
counterCreationDataCollection);
}
Run Code Online (Sandbox Code Playgroud)
计数器类别和计数器在性能监视器中创建并可查看.
然后我尝试更改计数器的值
PerformanceCounter myCounter =
new PerformanceCounter(counterCategory, counterName, false);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Setting to "+i);
myCounter.RawValue = i;
Thread.Sleep(200);
}
myCounter.Close();
Run Code Online (Sandbox Code Playgroud)
然而,当我坐下来观看性能监视器中的计数器没有任何反应时,价值永远不会改变.
那么我做错了什么?
如果我添加对nextValue()或rawValue()的调用,那么返回的值将按照我的预期返回,但Windows性能监视器仍显示扁平线,例如
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Setting to "+i);
myCounter.IncrementValue()
Console.WriteLine("Next Value = "+myCounter.RawValue());
Thread.Sleep(200);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我发现如果我关闭性能监视器,然后重新打开它而不删除计数器,那突然意识到它有一个新值.因此,值正在设置和持久,但性能监视器不会看到更改.
后续行动已有序进行。无论如何,在Win7下,性能监视器似乎可能无法按预期工作。当我编写测试代码时,我在创建计数器后暂停了应用程序,以便启动性能监视器。一旦我让它继续,监视器就不会改变它的计数器,尽管底层计数器被改变了。
如果我随后退出性能监视器并重新启动它,则会显示测试程序中的最后一个计数器值,表明其设置正确。如果我再次运行测试程序,仅更改值,性能监视器最终会发现更改。
因此,正如每个人都指出的那样,代码是正确的,是 Windows 性能监视器出现了异常。
谢谢大家的答案!
| 归档时间: |
|
| 查看次数: |
3485 次 |
| 最近记录: |