2013-01-03 77 views
2

我的问题是有些性能计数器类似乎有时会丢失,我不明白为什么。性能计数器丢失

下面的代码会抛出异常,如:

无法查找性能类别

错误消息:类别不存在。类别名称:HP EVA物理磁盘
目标组上的目录列表:
ServiceModelService 4.0。
喇嘛喇嘛

打印出包含性能计数器的一个长长的清单,但不是一个我之后。如果我查看perfmon.exe,我可以找到丢失的类别一次。

我正在使用以下代码来查找类别内的不同计数器。

public static string[] GetPerformanceCategory(string CategoryName) 
{ 
    //Console.WriteLine("CategoryName to Search for: " + CategoryName); 
    if (string.IsNullOrEmpty(CategoryName)) 
     throw new NullReferenceException("CategoryName is empty"); 

    try 
    { 
     PerformanceCounterCategory perfCat = new PerformanceCounterCategory(CategoryName); 

     string[] catInstances = perfCat.GetInstanceNames(); 
     return catInstances; 
    } 
    catch(Exception Ex) 
    { 
     StringBuilder ErrorMsg = new StringBuilder(); 
     ErrorMsg.AppendLine("Failed to lookup Preformance Category"); 
     ErrorMsg.AppendLine("Error Msg: " + Ex.Message); 
     ErrorMsg.AppendLine("CategoryName: " + CategoryName); 
     ErrorMsg.AppendLine("Category list on target:"); 

     StringBuilder CatList = new StringBuilder(); 
     var categories = PerformanceCounterCategory.GetCategories(); 
     foreach (var Cat in categories) 
      CatList.AppendLine(Cat.CategoryName);     

     ErrorMsg.AppendLine(CatList.ToString()); 

     Logger.WriteToLog(ErrorMsg.ToString(), EventLogEntryType.Error); 
     return null; 
    }  
} 

问题归结到,有没有一些“魔法”可以使性能指标消失?或者我可能需要做一些具体的事情?

+0

类似名称的声音正在设置为“HP EVA Physical Disk \ nGroup”。那是对的吗? –

+0

是的。这就是我想要的。但是当然没有\ n?那是一个复制过去的错误吗? – EKS

+1

抱歉,我无法在评论中获得回车。我的意思是它看起来像“磁盘”和“组”之间有一个换行符,如果你看看异常消息,它看起来像是有一个换行符。无论哪种方式,你说它没有显示在列表中,所以我想这没关系...... –

回答

0

我也有这个问题使用PerformanceCounterCategory.GetCategories()。 我的类别在一台机器上缺失。其他人没有问题。

Perfmon可以看到类别,typeperf在相同的提升命令提示符内可以看到类别,但不能通过.net代码。

一注意。在Windows Server 2008 R2上出现问题。不会发生在XP或Windows的问题7.

2

我有完全一样的问题,这是我应该如何解决:

服务器架构(x86或x64)和.net(C#)建立目标绝是相同的,否则你的代码无法访问所有的性能计数器(如果你的构建目标和服务器不同,只有性能计数器的一个子集可用)。因此在Visual Studio中,右键单击您的项目(在解决方案资源管理器中),然后选择“属性”,然后转到“构建”并选择x64作为平台目标(如果您的服务器在x64中,则选择x86 )。

+0

为我做了诀窍 - 谢谢! –