Я не уверен, как вы оцениваете отзывчивость, но для времени загрузки вы можете зарегистрировать StopWatch пропущенные миллисекунды последовательных событий, которые возникают при загрузке Формы. На основании 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 в Debug тайминги заключаются в следующем:
0 = Конструктора Start
19 = Конструктора - инициализируется
20 = Конструктора Конец
22 = HandleCreated
24 = BindingContextChanged
25 = Нагрузка
30 = активировано
31 = Показано
Класс System.Diagnostics.Stopwatch предлагает хорошую функциональность для этой цели .. http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch%28v=vs .110% 29.aspx – TDull
Это правда, но в вашем ответе нет ответа на вопрос: какие события мне нужно отслеживать, чтобы измерить время отклика для приложения Windows. –