Глобальное время страниц ASP.Net - PullRequest
1 голос
/ 18 марта 2009

Я только что унаследовал веб-сайт (ASP.Net 2.0), написанный кем-то другим, который мне нужно поддерживать.
Код не так уж и ужасен, но в нем есть несколько вещей, которые делают сайт невероятно медленным.

У меня есть идея это контролировать, и я хочу посмотреть, что об этом думают более опытные разработчики.

Моя цель сейчас - выяснить, когда страницы загружаются слишком долго, чтобы сосредоточить внимание на этих местах.

Я подумываю о подключении событий PreRequestHandlerExecute и PostRequestHandlerExecute в Global.asax, создании StopWatch в «Pre», присоединении его к HttpContext.Items и чтении в «Post», и если запрос занял больше скажем, 100 мс, он сообщит мне, чтобы я знал.

Какой-то «псевдокод» для этого будет:

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) {
    System.Diagnostics.Stopwatch theTimer = new Stopwatch();
    theTimer.Start();
    HttpContext.Current.Items.Add("RequestTimer", theTimer);
}

protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e) {
     Stopwatch theTimer = (Stopwatch) HttpContext.Current.Items["RequestTimer"];
     System.Diagnostics.Debug.WriteLine(theTimer.ElapsedMilliseconds + "@: " + HttpContext.Current.Request.RawUrl)
}

Что вы думаете об этом подходе?
Разумно ли это делать?
Это заставит мой сайт ползти на колени?
Есть лучший способ сделать это?

Некоторые мысли:
- Может быть, лучше взять DateTime.Now.Ticks и сохранить его, который, вероятно, будет легче, чем StopWatch
- Я знаю, что было бы лучше, чтобы все страницы наследовали от моей собственной страницы, и время там, но я не хочу просматривать десятки страниц и менять их все.

Любые мысли очень ценятся! Спасибо!

Ответы [ 4 ]

3 голосов
/ 18 марта 2009

Лучше всего было бы включить tracing .

2 голосов
/ 18 марта 2009

Я бы этого не делал. Это будет больше проблем, чем стоит. Для ASP.NET есть несколько хороших инструментов профилирования, таких как CLR Profiler и ANTS Profiler от Red Gate.

1 голос
/ 18 марта 2009

Как заметил БоббиШафтоэ, профилирование - ваш лучший выбор. Но рассмотрите также JetTrains 'dotTrace; это очень, очень хорошо.

1 голос
/ 18 марта 2009

Вместо того, чтобы возиться с секундомером, я просто выбрасываю время запуска в коллекции HttpContext и вытаскиваю его обратно. Затем вы можете выполнить простое вычитание в конце запроса, которое должно оказать незначительное влияние на производительность.

...