Нужно ли "отсоединять" обработчики событий в веб-формах ASP.NET? - PullRequest
5 голосов
/ 20 июня 2011

Учитывая, что все элементы управления в WebForm уничтожаются (насколько я понимаю) в конце каждой обратной передачи, вам нужно "размонтировать" какие-либо обработчики событий, которые вы, возможно, подключили? (Предполагая, что вы хотите прекратить обработку событий и разрешить GC)

Так, например:

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Do I need to remove this handler?
        btnSubmit.ServerClick += btnSubmit_ServerClick; 
    }
}

Ответы [ 4 ]

3 голосов
/ 20 июня 2011

Вряд ли.Срок действия вашего экземпляра WebForm1 заканчивается сразу после события Unload, если я правильно помню.Это не значит, что после того, как страница обслужена и очищена, существует постоянная ссылка на ваш WebForm1 класс.

2 голосов
/ 20 июня 2011

Нет, вам не нужно.Они будут собирать мусор.

0 голосов
/ 23 февраля 2017

Слишком просто предположить, что веб-форма недолговечна - в этом примере вы хорошо выглядите, но в целом вы должны быть осторожны.

Только сегодня я столкнулся с хорошим примером, похожим на @thmsn, где сбойотключение обработчиков событий в приложении ASP.NET WebForms вызывало неприятную утечку памяти.

В этом случае главная страница, используемая почти на всех страницах, подписывалась на событие объекта в своем Page_Init.Данный объект был долгоживущим и сохранялся в сеансе ASP.NET, а сайт был настроен на использование хранилища сеансов InProc с 60-минутным таймаутом.Отказ от подключения обработчика событий означал, что объект препятствовал ГХ всех страниц, к которым обращались во время сеанса, до тех пор, пока он выжил (по крайней мере, час в каждом случае).

Быстрыйисправление состояло в том, чтобы отключить обработчик события в Page_Unload - этот пример показывает, что время жизни страницы может быть непреднамеренно продлено сверх ее полезного времени жизни.Я не буду вдаваться в использование Session здесь, хотя это было далеко от идеала - и я видел похожие ошибки, возникающие с обратными ссылками от объектов с соответственно более длительным временем жизни страницы.

0 голосов
/ 24 ноября 2011

Мне удалось создать веб-приложение (WebForm) один раз с динамическими элементами управления, мне пришлось «развязывать» свои события, иначе страница становилась все медленнее и медленнее.«старые» страницы, которые, как я думал, GC позаботились, все еще были вокруг.Когда я разорвал событие в Page_Unload, мое приложение больше не вызывало событие для несуществующих страниц.

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

Просто пища для размышлений:)

...