gpt4 book ai didi

c# - Windows 性能计数器从 PerfMon 中消失

转载 作者:可可西里 更新时间:2023-11-01 10:08:02 26 4
gpt4 key购买 nike

我完全被这个弄糊涂了:在 Win7SP1 64 位机器上,PerfMon 似乎完全否认已安装的自定义性能计数器的知识。我正在使用一个现有的代码库,它在生产机器上安装计数器非常好,但是当我在我的机器上运行它时,当我用我添加的计数器运行它时,或者如果我运行一个完全人为的程序集(下面粘贴了其中的内容),我的行为非常奇怪。

使用以下代码片段可能最容易描述:

var category = "SuperTest";
var counterName = "Test Counter 1";
var shouldInstall = true;

if (PerformanceCounterCategory.Exists(category))
{
shouldInstall = false;
Console.WriteLine("{0} Category Exists. Overwrite? [n]", category);
var input = Console.ReadLine();
if (bool.TryParse(input, out shouldInstall))
{
PerformanceCounterCategory.Delete(category);
}
}
if (shouldInstall)
{
var col = new CounterCreationDataCollection();
col.Add(new CounterCreationData()
{
CounterName = counterName,
CounterType = PerformanceCounterType.NumberOfItems64
});

PerformanceCounterCategory.Create(category, "Test category.", PerformanceCounterCategoryType.SingleInstance, col);
// Magical voodoo line that may indicate my inexperience, but whose inclusion or
// exclusion does not affect discernibly affect behavior.
PerformanceCounter.CloseSharedResources();
}

// Multithreading setup, each thread repeats block below infinitely:
{
System.Threading.Thread.Sleep((new Random()).Next(100));
try
{
var counter = new PerformanceCounter(category, counterName, false));
c.Increment();
}
catch (Exception ex) { /* ... */ }
}

第一次运行时,类别不存在,它继续创建类别和计数器。我终止进程,然后打开 PerfMon。此时,我可以添加计数器,查看类别和计数器,完美地添加它,并观察它位于0.000。完美的。此时,如果我关闭 PerfMon 再重新打开呢?我可以看到所有的系统性能计数器都很好,但是我所有的自定义计数器——如上所述,在生产中工作的,我基于这些创建的,人为的—— -就这样走了。

有趣的是,如果我运行上面的代码,它会始终如一地告诉我该组存在。深入研究,计数器甚至存在。这对我来说似乎很奇怪。让它仍然处于消失状态,并从 here 中得到启发,我可以运行:lodctr/R,他们回来。

所以看起来我以某种方式破坏了我自己的性能计数器存储。我的问题分为两部分:

  1. 这就是我在做的事情(破坏性能计数器存储)吗?
  2. 由于它是可重现的,在我为创建此行为所做的代码或过程中是否有任何突出的地方?

在我看来,这与其他“性能计数器消失”问题有些不同,因为它们确实存在,而且我正在看着它们消失。

最佳答案

问题很可能出在计算机和/或其配置上,而不是出在您发布的代码上。我遇到过同样的情况,一直没有遇到打开性能监视器时计数器消失的原因。不过,我可以帮您解决这个问题:

  • Perfmon 有时会 disable performance counters通过在注册表中将其标记为禁用。该链接可能会帮助您找到禁用计数器的原因。

  • 也可以使用工具 typeperf 监控计数器.根据我的经验,typeperf 并没有像 perfmon 那样禁用相同的计数器,这为您提供了另一种监视计数器的方法。

关于c# - Windows 性能计数器从 PerfMon 中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10341079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com