【问题标题】:Why do I not have a `_Total` performance counter instance?为什么我没有`_Total` 性能计数器实例?
【发布时间】:2014-08-21 13:57:56
【问题描述】:

我正在使用以下注册码创建一个多实例性能计数器,但似乎没有_Total 实例——即使我有多个活动实例。我需要做什么才能得到总数?

注册码:

var slc = new CounterCreationDataCollection();
slc.Add(new CounterCreationData()
{
    CounterName = "Channels Open",
    CounterType = PerformanceCounterType.NumberOfItems32,
    CounterHelp = "Number of channels that have not been cleaned up."
});
PerformanceCounterCategory.Create("Frob", "Monitors the frob", 
    PerformanceCounterCategoryType.MultiInstance, slc);

报告代码:

var channelName = "Widget 6";
var pcOpen = new PerformanceCounter("Frob", "Channels Open", channelName, false);

// elsewhere
pcOpen.Increment();

// followed by
pcOpen.Decrement();

生产:

【问题讨论】:

  • 你能展示一个没有模糊实例的版本吗?
  • @ScottChamberlain,它们只是显示各种内部应用程序的名称。想象一下contoso.ap.poLineManagercontoso.ar.collectionsHelper等等……
  • AFAIK,没有什么可以自动生成这些实例。你必须自己做。见this answer

标签: c# windows performancecounter


【解决方案1】:

我相信_Total 计数器只是他们手动汇总总数的另一个实例。它具有领先的_ 的原因是它按字母顺序排列在<All instances> 中的< 之前,这是一个“元”计数器。

var pc5Name = "Widget 5";
var pc6Name = "Widget 6";
var pc5 = new PerformanceCounter("Frob", "Channels Open", pc5Name, false);
var pc6 = new PerformanceCounter("Frob", "Channels Open", pc6Name, false);
var pcTotal = new PerformanceCounter("Frob", "Channels Open", "_Total", false);

// elsewhere
pc5.Increment();
pcTotal.Increment()

// more elsewhere
pc6.Increment();
pcTotal.Increment()

// followed by
pc5.Decrement();
pcTotal.Decrement();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2010-11-06
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多