摘要:使用Performance Counter元件監控程式是否有異常,C#
很多人應該都有使用過Performance效能監視器的這個功能,有去細玩過的人,都會發現到它的好用,但說好用,似乎又少了那麼一丁點的功能,總是有那麼一點遺憾,而Visual Studio內有Performance Counter這個元件可以供使用,所以接下來就可以用這個物件,來寫出我們所需要的功能.
這個Performance Counter元件在Visual Studio 2002/2003/2005內都有,並不是什麼新的功能,以下的例子,是採用VS 2005 的C#所撰寫的.
現在要舉的這個使用範例,可能是部份MIS人員所會遇到的,當有一個自己開發的程式放在某台伺服器上,但我們又不可能隨時登入去看那個程式是否還在正常執行,如何籍由另一個程式來監控它,並回報檢查結果,讓我們能隨時掌握它的狀況,也不需一直登入去看.上班就喝咖啡,聊是非就好~
有一點要注意的,就是這個只支援.Net的程式,以下為程式範例 :
public string CheckAP(string MachineName,string InstanceName)
{//MachineName電腦名稱,InstanceName程式名稱
PerformanceCounter pc = new PerformanceCounter();
try
{
pc.CategoryName = ".NET CLR Exceptions";//這裡所設定的就是效能監視器的效能物件,看到這個,就知道為什麼這程式只支援.Net的程式
pc.CounterName = "# of Exceps Thrown";//這裡所設定就是效能監視器的計數器
pc.ReadOnly = true;
pc.InstanceLifetime = PerformanceCounterInstanceLifetime.Global;
pc.MachineName = MachineName.Trim();
pc.InstanceName = InstanceName.Trim();
return pc.NextValue().ToString();//回傳發生Exception的次數
}
catch (InvalidOperationException ioe)
{
if (Process.GetProcessesByName(InstanceName, MachineName).Length == 0)//檢查程式是否沒有執行
{
return " 程式未執行!";
}
else
{
return ioe.Message;
}
}
catch (Exception ex)
{
return ex.Message;
}
finally
{
pc.Close();
pc.Dispose();
PerformanceCounter.CloseSharedResources();//釋放由計數器配置的效能計數器程式庫的共用狀態
}
}
之後,只要用Timer定時的去呼叫這一段程式,就可以知道監控中的那個程式,是否運作正常.如果異常,再依個人的需求去做處理就好,這個例子,是用來抓Exception,但效能監視器可不是只能監控這個,它還可以監控記憶體,IO,CPU,SQL,網路…等,所以這個就可以有很大的發揮空間,看大家怎麼去利用Performance Counter所回傳的結果去做處理囉.
詳細說明,請參考Visual Studio的Help,找Performance Counter.