2013-01-03 75 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

爲我做了訣竅 - 謝謝! –