Size: a a a

2021 August 22

rr

razumovsky r in CODE BLOG / C#
серий 8 всего
источник

F

FFx in CODE BLOG / C#
Я почему то когда речь про Лёху заходит, всегда его таким представляю, хотя это даже не акула
источник

F

FFx in CODE BLOG / C#
Эх, были времена
источник

AB

Alex Berezhnykh in CODE BLOG / C#
Японская культура
источник

F

FFx in CODE BLOG / C#
Японская крипота
источник

G

Genri in CODE BLOG / C#
Ребят, тут как-то негаданно вопрос назрел. Смотрю тут код один в интернете. И случайно увидел в реализации метода Dispose (от интрфейса IIDisposable) вызов финализатора (GC.SuppressFinalize(this); И да - я такой код уже встречал ни раз, но никогда не задумывался зачем вызывают . Причем, когда сам пишу реализацию, никогда не использую в Dispose финализатор. Посмотрел код коллег своих, тоже нигде в Dispose не вижу вызов финализатора. Обычно сами ручками почистили что нужно, и всё. Так вот - по сути его задача нужна, чтоб объект 2 раза не чистился, если он уже удален. Но увы, что если GC попытается второй раз почистить, программа , то не упадёт? GC - же умный - приложение не будет ложить же... Вот и вопрос, насколько имеет смысл в практике вызывать GC.SuppressFinalize(this); в конце реализации метода Dispose?и что будет если всё-таки GC пойдёт и попытается удалить уже мёртвый  объект...
источник

AB

Alex Berezhnykh in CODE BLOG / C#
GC не попытается удалить мёртвый обьект
источник

AK

Andrew Kravchuk in CODE BLOG / C#
В диспоузе вызывается, чтобы для этого объекта не вызывался финализатор, т. к. ресурсы уже почищены в диспоуз
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Тогда он не будет помещен в очередь финализации
источник

G

Genri in CODE BLOG / C#
Почему в практике не вижу... Что будет, если не указать на этот момент GC ?
источник

AB

Alex Berezhnykh in CODE BLOG / C#
не совсем тебя понимаю
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Я могу ошибаться, но с финализатором объект чистится в 2 прохода гк, один из которых - помещение в очередь финализации, соответственно таким образом можно указать для гк, что для этого объекта не надо вызывать финализатор и объект почистится в 1 проход гк
источник

AK

Andrew Kravchuk in CODE BLOG / C#
@DedSec256 +-так?)
источник

AB

Alex Berezhnykh in CODE BLOG / C#
обьект переходит в следующее поколение
источник

AB

Alex Berezhnykh in CODE BLOG / C#
не сразу удаляется, ага
источник

AB

Alex Berezhnykh in CODE BLOG / C#
короче
источник

AB

Alex Berezhnykh in CODE BLOG / C#
если у тебя нет финализатора, то supressFinalize тебе не нужен
источник

AB

Alex Berezhnykh in CODE BLOG / C#
если есть вместе с dispose — то может быть нужен, чтобы не вызывался финализатор
источник

G

Genri in CODE BLOG / C#
То есть суть этой строчки помочь гарбич коллектору не проходиться по объекту дважды ?
источник

AB

Alex Berezhnykh in CODE BLOG / C#
GC когда видит, что у обьета есть финализатор, то сразу его не очищает
источник