Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Оперативная память


Автор: granit1986 14.7.2009, 11:18
возник вопрос, если я сделаю вот так

Код

public SqlDataAdapter da;
private void MainForm_Load(object sender, EventArgs e)
      {
         da = new SqlDataAdapter();
         da = new SqlDataAdapter();
         da = new SqlDataAdapter();
      }


и так много раз, то будет ли память забиваться или этот объект простто будет затираться и на его месте создаваться новый?

Автор: Skynin 14.7.2009, 12:02
Рекомендую разобраться с пониманием терминов "объект" и "ссылка на объект", и ответить на свой вопрос самостоятельно.
Можно начать с http://lib.ru/CTOTOR/starterkit.txt#1. Там о Си, но суть процесса - та же.

Автор: Irdis 14.7.2009, 13:28
В .net когда пишется new интелект можно отключить, т.к. о распределении виртуальной памяти заботится виртуальная машина(а об оперативной ядро системы, к слову). 
Когда на обьект пропадают ссылки (простым языком, это момент когда обьект становится ненужным), память освобождается. 
В данном случае 
da= new ...//( объект)
da= new ...//( новый объект, на старый ссылка пропала-> он ненужен, освобождаем память и записывается в da новый объект)

Автор: mihryak 14.7.2009, 15:19
Цитата(Irdis @  14.7.2009,  14:28 Найти цитируемый пост)
В .net когда пишется new интелект можно отключить

октлючаться никогда нельзя, а вот хорошо понимать, что там внутри происходит - нужно

SqlDataAdapter реализует интерфейс IDisposable, такие классы в подавляющем большинстве случаев стоит вручную "освобождать", вызывая этолт интерфейсный метод Dispose явно (в try-finally) или неявно (через using)
при работе с бд отсутствие этого вызова чаще всего приводит невозможности открытия нового соединения, т.к. старые не были закрыты явно, в более "тяжёлых" случаях эта проблема почти не проявляется, что может приводить к совершенно непредсказуемым и трудноотлавливаемым  последствиям

так что "доверяя - проверяй"

Добавлено через 1 минуту и 18 секунд
Цитата(Irdis @  14.7.2009,  14:28 Найти цитируемый пост)
da= new ...//( новый объект, на старый ссылка пропала-> он ненужен, освобождаем память и записывается в da новый объект)

память,кстати, тут не освобождается, просто на этот объект теряется ссылка, что даёт моральное право сборщику мусора его прибить
но вот когда именно он на него наткнётся - большой вопрос без ответа

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)