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