Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, igor-booch, Вы писали:
IB>>Финализатор с отпиской слабого хендлера от события как советуют здесь (Решение 3: Отписка от события в финализаторе)
НС>Мой тебе совет — не стоит использовать хабр как источник технической информации.
Здравствуйте, igor-booch, Вы писали:
S>>Но не всегда можно вызвать Dispose, а освободить ресурсы необходимо. IB>Приведите пример, когда нельзя вызвать Dispose
Эмм, ну вот например как-то так:
var myFile = File.OpenWrite("C:\temp\0asdask12.txt");
Thread.Create(o=>myFile.Write(Encoding.UTF-8.GetBytes(o.ToString())).Start(myBigObject);
Где вы тут будете звать Dispose()?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[19]: WPF. Финализаторы не вызываются. Утечка памяти
Здравствуйте, igor-booch, Вы писали:
IB>Условия воспроизведения: IB>1) Visual Studio 2017 IB>2) Приложение WPF IB>3) Запуск приложение под отладчиком IB>4) код окна WPF
IB>Этот код отваливается с OutOfMemoryException. Финализаторы Item() не вызываются.
Зпустил под VS2019 все работает нормально, память не растет.
Re[20]: WPF. Финализаторы не вызываются. Утечка памяти
Открою тебе секрет зачем был придуман GС.
В С++ вручную овобождают память в куче (там есть и подсчет ссылок, и shared_ptr). Но не всегда это возможно. В COM применяли подсчет ссылок, но были циклические ссылки которые не разруливались.
Объектом могут владеть множество других объектов, и нужно освобождать ресурсы когда ссылок на них нет.
и солнце б утром не вставало, когда бы не было меня
Re[2]: WPF. Финализаторы не вызываются. Утечка памяти
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, igor-booch, Вы писали:
IB>>Условия воспроизведения: IB>>1) Visual Studio 2017 IB>>2) Приложение WPF IB>>3) Запуск приложение под отладчиком IB>>4) код окна WPF
IB>>Этот код отваливается с OutOfMemoryException. Финализаторы Item() не вызываются.
HD>Зпустил под VS2019 все работает нормально, память не растет.
У меня в 2019 тоже раблтает
Note: In an earlier version of this specification, what is now referred to as a “finalizer” was called a “destructor”. Experience has shown that the term “destructor” caused confusion and often resulted to incorrect expectations, especially to programmers knowing C++. In C++, a destructor is called in a determinate manner, whereas, in C#, a finalizer is not. To get determinate behavior from C#, one should use Dispose. end note