C#, явно удаляющий обработчики событий

# Pure Python 3.x demo, 256 colors
# Works with bash under Linux and MacOS

fg = lambda text, color: "\33[38;5;" + str(color) + "m" + text + "\33[0m"
bg = lambda text, color: "\33[48;5;" + str(color) + "m" + text + "\33[0m"

def print_six(row, format):
    for col in range(6):
        color = row*6 + col + 4
        if color>=0:
            text = "{:3d}".format(color)
            print (format(text,color), end=" ")
        else:
            print("   ", end=" ")

for row in range(-1,42):
    print_six(row, fg)
    print("",end=" ")
    print_six(row, bg)
    print()

# Simple usage: print(fg("text", 160))

Text with altering foreground and background, colors 0..141 Text with altering foreground and background, colors 142..255

14
задан Damien 29 July 2009 в 04:41
поделиться

3 ответа

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

17
ответ дан 1 December 2019 в 07:27
поделиться

Резюме: вам необходимо явно отказаться от подписки, если источник / издатель события является долгоживущим, а подписчики - нет. Если источник события перестал существовать у подписчиков, все зарегистрированные подписчики остаются «живыми» источником события (не собираемым GC), если только они не отписываются (и не удаляют ссылку на себя из списка уведомлений издателя событий)

Также это дубликат Нужно ли явно удалять обработчики событий в C # и имеет хороший заголовок и ответ. Итак, голосование за закрытие.

11
ответ дан 1 December 2019 в 07:27
поделиться

См. Обсуждение здесь в разделе «Последний вопрос: нужно ли нам удалять обработчики событий?»

Заключение: вы должны удалить делегаты с мероприятий, когда они достигают вне самого класса; т.е. когда вы подписываетесь на внешние события, вы следует прекратить подписку, когда вы сделаны. В противном случае ваш объект жив дольше чем необходимо.

8
ответ дан 1 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: