Захват времени выполнения сервера ASP.Net без задержки сети - PullRequest
2 голосов
/ 19 ноября 2010

Мне нужно зафиксировать количество времени, которое ASP.net тратит на выполнение каждого запроса страницы в моем приложении, но мне нужно исключить любую задержку в сети.В настоящее время я фиксирую время рендеринга с помощью класса StopWatch и запуска секундомера во время метода OnInit жизненного цикла страницы и остановки его после завершения метода Unload.Похоже, что метод Unload включает в себя время, необходимое для отправки запроса клиенту, таким образом, включая любую задержку интернета / сети.Каков последний возможный момент, который я мог бы остановить секундомером в жизненном цикле страницы, который бы не включал время, необходимое для отправки запроса клиенту.Будет ли это непосредственно перед событием Unload?

Смежный вопрос: завершает ли ASP.net сборку ответа до того, как он начнет отправляться клиенту?Или он начинает отправлять асинхронно, пока формируется ответ?

В настоящее время я использую ASP.Net 2.0 с IIS 5.

У меня есть этот код в классе, от которого наследуются все мои страницы:

readonly Stopwatch _serverExecutionTime = new Stopwatch();

protected override void OnInit(EventArgs e)
{
    _serverExecutionTime.Start();
    base.OnInit(e);
}    

protected override void OnUnload(EventArgs e)
{
    _serverExecutionTime.Stop();
    base.OnUnload(e);
}

UPDATE

Я попытался записать время выполнения в конце метода OnRender, в начале метода OnUnload и в конце метода OnUnload.Во всех трех случаях разница во времени составляла не более 1 миллисекунды.Даже при тестировании этого от клиента в Европе до сервера в США времена были идентичны.Поэтому я думаю, что здесь что-то упущено.

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

Если для Response.BufferOutput задано значение true, то .Net будет ожидать завершения обработки страницы, прежде чем отправлять html обратно клиенту.

Если значение равно false, .Net начинает отправлять данные обратно каккак только это возможно.

Response.Flush обычно очищает буфер.

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

ОБНОВЛЕНИЕ (из комментариев)
Этобыло немного длиннее комментария.

Джон, Вы уверены, что еще не устранили фактор задержки?Чтобы обнаружить его, вы должны убедиться, что ваш локальный веб-кеш и DNS-кеш очищены перед выполнением каждого теста.Если все это кэшируется, а объем оставшихся данных довольно мал, то на самом деле не будет большого значения, где находится сервер.Допустим, не кэшируемая часть страницы составляет всего 4 КБ.Вы не заметите большой разницы между 2-мегабайтным соединением и ISDN-линией в скорости страницы.

Вы можете проверить этот вопрос , чтобы узнать, как проверить различные уровни задержки.Я знаю, что вы хотите устранить все задержки как фактор, но вы могли бы рассмотреть возможность атаковать это с другой точки зрения.А именно, проверка разницы между соединением с высокой задержкой и соединением с низкой задержкой.Это должно дать вам достаточное количество информации, чтобы выделить те времена из значений, которые вы действительно хотите.

0 голосов
/ 19 ноября 2010

В файле журнала IIS время, затраченное на обработку запроса. Это может включать любое время, необходимое для вызова .Net, которое ваш метод не записывает.

0 голосов
/ 19 ноября 2010

Просто включите трассировку ASP.NET: http://msdn.microsoft.com/en-us/library/ms972204.aspx Показывает время выполнения для каждого метода и для всей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...