Performance Monitor采集性能數據
Windows本身為我們提供了很多好用的性能分析工具,大家日常都使用過資源管理器,在里面能即時直觀的看到CPU占用率、物理內存使用量等信息。此外新系統中還加入了一個資源監視器(下圖2)能夠提供更多更直觀有關CPU、I/O、網絡方面的性能信息統計與視圖。
當然僅靠這些工具是不能滿足性能分析需求的,從Windows NT4.0時代,Windows就為我們提供了一個叫做Performance Monitor的強有力的性能工具幫助我們分析系統負載找出性能瓶頸,在Windows 7中路徑是%windir%\system32\perfmon.msc,您也可以在面板的管理工具中找到它。
下面我們一起來通過幾個實驗了解它的基本應用。
a.在”監視工具”->”性能監視器”中添加自己需要的性能計數器,然后觀察一段時間內的性能數據圖表。 |
可以看到里面有極為豐富的計數器可供選擇。選好后即可進行即時的數據監測。
b.由當前性能監視設置生成一個htm文件,以后只需要打開這個html文件中即可直接查看此配置下即時的性能數據,操作同在控制台中一樣。 |
c.在程序中創建計數器、采集性能數據、操作計數器數據。 |
FCL中有名為System.Diagnostics的命名空間,里面提供了特定的類,使我們能夠與系統進程、事件日志和性能計數器進行交互。PerformanceCounter 類使您能夠監視系統性能,而 PerformanceCounterCategory 類則提供新建自定義計數器和類別的方式。
假如我們有名為“SopacoPerformanceCategory”的計數器類型,里面有CounterOne這個計數器,則可以使用諸如“PerformanceCounter counter = new PerformanceCounter("SopacoPerformanceCategory", "CounterOne", false);”的代碼獲得此計數器實例。PerformanceCounter有像IncrementBy這樣原子操作方法,可以在並發情況下正確的修改數值。
下面的代碼會在30秒內不斷對CounterOne進行隨機修改,可以通過性能監視器視圖看到其變化。
internal class PerformanceShow_Demo
{
private static PerformanceCounter counter = new PerformanceCounter("SopacoPerformanceCategory", "CounterOne", false);
private static int n = 0;
private static System.Timers.Timer timer = new System.Timers.Timer(1000);
static void Main(string[] args)
{
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
counter.RawValue = 0;
timer.Enabled = true;
timer.Start();
Thread.Sleep(40000);
}
private static void timer_Elapsed(object sender, EventArgs e)
{
Console.WriteLine(e.ToString());
counter.IncrementBy(new Random().Next(-10, 20));
n++;
if(n > 30)
timer.Stop();
}
}
d.使用數據收集器,開啟自動監測並持久化監測數據 |
上面過程中我們一直是通過實時圖標來分析性能數據,更多時候我們需要的是讓統計工具自動運行在后台,並將數據記錄到日志中。Performance Monitor為我們提供了這種便利。首先在“數據收集器集”->“用戶定義”右鍵選擇“新建->數據收集器集”(默認添加了NT Kernel和PerformanceCounter兩個計數器)。然后在建好的數據收集器中添加、設置好所需的數據收集器(如圖)。
這樣我們就可以啟動這個數據收集器集讓他自動采集數據。當開始數據采集后你會發現左側列表中在報告欄內會自動增加你這個數據集器集的報告,可以直接查看數據報告和報表或將報告導出到其他位置。
![]() |
網名: |
無疆_炎戎 |
實名: |
姜萌 |
|
http://www.wjiangathpc.spaces.live.com/ | ||
http://www.cnblogs.com/wJiang |