2017-06-12 84 views
1

我正在嘗試讀取Azure工作程序角色應用程序(C#)中「HTTP服務請求隊列」類別中的性能計數器。Windows性能計數器不適用於C#(在Azure工作者角色上)

默認情況下,應用程序無法從該類別的所有計數器,即

string performanceCategoryName = "HTTP Service Request Queues"; 
    var httpQueueCategory = PerformanceCounterCategory.GetCategories().FirstOrDefault(category => category.CategoryName == performanceCategoryName); 

給空。

但是,如果我遠程桌面中的實例並啓動perfmon,我可以看到那裏的類別。如果我從perfmon中查看它,然後重新啓動應用程序,那麼應用程序也可以讀取計數器。就好像perfmon創建計數器一樣,默認情況下它不存在。

有沒有人知道這方面的工作?

回答

0

我解決了這個問題,通過啓動一個cmd進程並在owin監聽器啓動後從我的應用程序中調用「typeperf -q」。

這與打開perfmon具有相同的效果,即默認情況下不存在的類別現在可用於我的應用程序。 確保您在嘗試訪問計數器類別之前等待typeperf列表完成(這在小型天青工人角色實例上需要大約20秒)。

這是對我工作:

 var startInfo = new ProcessStartInfo() 
     { 
      WindowStyle = ProcessWindowStyle.Hidden, 
      FileName = "cmd.exe", 
      Arguments = "/C typeperf.exe -q", 
     }; 
     Process p = new Process() { StartInfo = startInfo }; 
     p.Start(); 
     p.WaitForExit(2*60*1000); 

     string performanceCategoryName = "HTTP Service Request Queues"; 

     var httpQueueCategory = PerformanceCounterCategory.GetCategories().FirstOrDefault(category => category.CategoryName == performanceCategoryName); 

注意,它註冊您的應用程序HTTP監聽後做上市是非常重要的。否則你的實例將不可用。我注意到這一點,因爲我試圖在啓動worker角色之前將cmd作爲啓動任務運行,但這並不起作用。

相關問題