Я только что прочитал ваш пост в блоге и думаю, что вы получили несколько вводящих в заблуждение советов, Мэтт. Если здесь есть фактическая утечка памяти, то это ошибка в .NET Framework, а не то, что вы обязательно сможете исправить в своем коде.
Я думаю, что вы (и постер в своем блоге) на самом деле говорите здесь не об утечке, а о продолжающемся потреблении памяти. Это не то же самое. Чтобы было ясно, утечка памяти — это память, которая зарезервирована программой, затем заброшена (т. е. указатель остается висящим) и которая впоследствии не может быть освобождена. Поскольку управление памятью осуществляется в .NET, это теоретически невозможно. Однако программа может резервировать постоянно увеличивающийся объем памяти, не позволяя ссылкам на нее выходить за пределы области видимости (и получать право на сборку мусора); однако эта память не просочилась. Сборщик мусора вернет его системе после выхода из вашей программы.
Так. Чтобы ответить на ваш вопрос, я не думаю, что у вас действительно есть проблема. У вас, конечно, нет утечки памяти, и, исходя из вашего кода, я не думаю, что вам нужно беспокоиться о потреблении памяти. Пока вы убедитесь, что вы не назначаете этот обработчик событий повторно, даже не отменяя его назначения (т. е. что вы либо устанавливаете его только один раз, либо удаляете его ровно один раз при каждом назначении), что вы, кажется, делаете, ваш код должен быть в порядке.
Похоже, это совет, который пытался дать вам постер в вашем блоге, но он использовал эту тревожную работу «утечка», что является страшным словом, но которое многие программисты забыли истинное значение в управляемом мире; это не применимо здесь.
person
TheSmurf
schedule
18.08.2008