使用Performance Counter元件監控程式是否有異常,C#

摘要:使用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 StudioHelp,Performance Counter.