2009-09-08 21 views
13

Aktualnie pracuję nad aplikacją ASP.NET, która korzysta z MasterPage i chcę zmierzyć czas ładowania mojego formularza internetowego i wyświetlić te informacje klientowi.Zmierz czas ładowania strony ASP.NET

Moja obecna strategia polega na wykorzystaniu skojarzony zwrotnego Application_BeginRequest zdarzeń (w pliku mojego rozwiązania stronie Global.asax), aby rozpocząć pomiar czasu spędzonego na proces po stronie serwera (następująco)

protected void Application_BeginRequest(Object sender, EventArgs e) { 
    Context.Items.Add("Request_Start_Time", DateTime.Now); 
} 

i obliczyć czas, który upłynął na OnPreRender zdarzenia związanego zwrotnego formularza internetowego, w drukując go na element zastępczy (następująco)

protected override void OnPreRender(EventArgs e) { 
    base.OnPreRender(e); 

    TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]); 
    ExecutionTime.InnerHtml = "<em>Server-side processing duration: " + tsDuration.TotalMilliseconds + " miliseconds.</em>"; 
} 

jest to najlepszy sposób, aby zmierzyć czas ładowania? Czy istnieje bardziej "elegancki" sposób, aby to osiągnąć?

Z góry dziękujemy za poświęcony czas i współpracę.

Odpowiedz

7

<% nazwiska @ page = "true" %> (lub ustawić to w pliku web.config)

Włącz śledzenie i sprawdź informacje w trace.axd (w katalogu głównym swojej stronie internetowej).

Następnie można ustawić punkty czasowe z:

Trace.Write("Start time intensive task"); 
Trace.Write("Stop time intensive task"); 

http://msdn.microsoft.com/en-us/library/bb386420.aspx

to zakładając, "klient" chcą głębokie dane diagnostyczne.

+0

Jak już wspomniałem, używam strony wzorcowej i nie zastanawiam się, jak włączyć śledzenie, ponieważ nie ma ona właściwości "śledzenia". Czy możesz mi pomóc z tym? – XpiritO

+0

Nie musisz włączać śledzenia na stronie po stronie, po prostu rób to w swoim web.config, i będzie działać na wszystkich stronach: http://msdn.microsoft.com/en-us/library/6915t83k.aspx Ale nie zachowuj tego ustawienia do produkcji! – realMarkusSchmidt

+0

@markus "Ten temat nie jest już dostępny" @ http://msdn.microsoft.com/en-us/library/6915t83k.aspx – Zack

1

To naprawdę zależy od tego, jakie dane są faktycznie wyświetlane.

  1. Czy to jest ogólna "strona załadowana w __ sekundach", która będzie tam przez cały czas?
  2. Czy to oznacza, że ​​twoje zakodowane rozwiązanie spełnia wymagania klienta, a nie jest potrzebne do produkcji?

Odpowiedź na te dwie kwestie będzie decydować o tym, co ma największy sens w nagrywaniu. Jeśli Twoim celem jest # 1, powiedziałbym, że twoja metoda działa. Jeśli wybierasz się na numer 2, mógłbym patrzeć na to, co Erwin ma.

4

Twoja aplikacja wydaje się być wystarczająco dokładna, o ile nie renderujesz bardzo dużych drzewek kontrolnych i nie używasz kontrolek serwera, które wykonują całą swoją pracę w nadpisanej metodzie Render (niedoświadczeni autorzy kontroli serwera zwykle robią dokładnie że...).

W takim przypadku istnieje sposób renderowania rzeczywistego czasu renderowania ;-) Wystarczy użyć obiektu HttpResponse.Filter, aby wypełnić symbol zastępczy z upływem czasu. Filtry te są stosowane po renderowaniu formularza internetowego i przed przejściem do klienta.

Jeśli potrzebujesz tego tylko do programowania, wyszukaj trace.axd, to da ci wiele szczegółów nie tylko o taktowaniu, ale także kontekście żądania, strukturze drzewa kontrolnego i rozmiarze strony.

Powiązane problemy