2014-12-02 92 views
1

需要添加到.net Windows應用程序中,以測量Windows窗體的響應速度和加載時間。如何測量WinForms的響應速度和加載時間

什麼是測量winform響應和加載時間的正確方法?

+0

的System.Diagnostics.Stopwatch類提供了良好的功能,爲了這個目的.. http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch%28v=vs .110%29.aspx – TDull 2014-12-02 18:18:52

+0

確實如此,但在您的回答中沒有回答問題:爲了衡量Windows應用程序的響應時間,需要跟蹤哪些事件。 – 2014-12-03 08:17:12

回答

1

我不知道如何衡量響應能力,但是對於加載時間,您可以記錄在加載表單時引發的連續事件過去的毫秒數。基於Order of Events in Windows Forms MSDN上我們學習提高(按順序)的事件是:

  • Control.HandleCreated
  • Control.BindingContextChanged
  • Form.Load
  • Control.VisibleChanged
  • Form.Activated
  • Form.Shown

你可以將這些連接起來事件在窗體的構造函數中,並有一個簡單的Log方法來處理數據收集。請注意收集數據也需要時間。

public partial class Form1 : Form 
{ 
    Stopwatch timing = new Stopwatch(); 

    // naive data collection 
    void Log(string stage) 
    { 
     Trace.WriteLine(String.Format("{0} = {1}", timing.ElapsedMilliseconds, stage)); 
    } 

    public Form1() 
    { 
     timing.Start(); 
     Log("Constructor Start"); 
     InitializeComponent(); // adding all designer generated stuff 
     Log("Constructor - Initialized"); 
     // hookup events 
     this.HandleCreated += (s, e) => Log("HandleCreated"); 
     this.BindingContextChanged += (s,e)=> Log("BindingContextChanged"); 
     this.Load += (s, e) => Log("Load"); 
     this.Activated += (s, e) => Log("Activated"); 
     this.Shown += (s, e) => Log("Shown"); ; 
     Log("Constructor End"); 
    } 
} 

在我的筆記本電腦與.NET 4.0在調試的定時如下:

0 =構造開始
19 =構造函數 - 初始化
20 =構造完
22 = HandleCreated在
24 = BindingContextChanged
25 =加載
30 =激活
31 =所示