Подтвердить что ты не робот

Может ли "EndResponse" повысить производительность страницы ASP.Net?

У меня есть Response.Redirect на моей странице Employee. Он перенаправляется на страницу "Зарплата".

Response.Redirect ("Salary.aspx");

Он работал нормально, пока я не добавил обработку исключений, как показано ниже.

try
{
   Response.Redirect ("Salary.aspx");
}
catch(Exception ex)
{
//MyLog();
    throw new Exception();
}

//Remaining code in event handler

Это вызвало новое исключение: "Thread был отменен". Я узнал, что этого можно избежать, установив endResponse как false для перенаправления.

Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

Объяснение нового исключения: он всегда выдает исключение, но обрабатывается каркасом. Поскольку я добавил try..catch, он был пойман там (и я выбрал новое исключение)

Примечание: CompleteRequest обходит дополнительные HTTP-фильтры и модули, но не обходит дальнейшие события в текущем жизненном цикле страницы

Примечание. Response.Redirect выдает это исключение для завершения обработки текущей страницы. ASP.Net сам обрабатывает это исключение и вызывает ResetAbort для продолжения обработки.

Вопрос

  • "Установление endResponse как false" может увеличить производительность, поскольку исключение не выбрано?
  • "Установление endResponse как false" может уменьшить производительность, поскольку события жизненного цикла страницы не прекращаются?

ловушка

  • Если вы установите endResponse как false, будет выполнен оставшийся код в обработчике событий. Поэтому нам нужно сделать проверку if для оставшегося кода (проверьте: если критерии перенаправления не были выполнены).

Ссылка

4b9b3361

Ответ 1

Завершение ответа (Response.Redirect(url) или Response.Redirect(url, true)) не будет иметь лучшую производительность, чем Response.Redirect(url, false). С помощью false, поскольку вы контролируете выполнение кода, вы можете просто не выполнять больше кода в случае, когда вы собираетесь перенаправить пользователя.

Это указано в записи MSDN для Response.Redirect():

Если вы укажете true для параметра endResponse, этот метод вызывает метод End для исходного запроса, который генерирует исключение ThreadAbortException при его завершении. Это исключение оказывает пагубное влияние на производительность веб-приложений, поэтому рекомендуется передавать false для параметра endResponse.

Вы должны быть обеспокоены событиями жизненного цикла страницы, как вы отметили. Вы не должны продолжать выполнение событий страницы, если вы собираетесь перенаправить пользователя (не только для производительности). Недавно я написал краткий пример, показывающий что может случиться с плохим кодированием/планированием, если вы этого не сделаете.

В нижней строке этого сообщения указано, что Response.Redirect() возвращает 302 в браузер. Существует вероятность проблем, когда вы используете Response.Redirect(url, false), так как выполнение страницы продолжается, и пользователь может игнорировать 302, а вместо этого видеть страницу, которая была бы визуализирована... поэтому вам нужно предпринять шаги, чтобы убедиться, что они не видите ничего, что вы не хотите, чтобы они видели. NoRedirect дополнение для Firefox полезно при тестировании.

Для лучшей производительности: используйте "false" как параметр endResponse, убедитесь, что вы не используете какой-либо дополнительный код, и убедитесь, что страница не будет отображать какую-либо информацию, t хотите, чтобы пользователь увидел, игнорируют ли они 302.