метод
ли Dispose() не освобождает косметику объекта памяти &, как нуля ??
Dispose
и структура утилизации не для освоения управляемой памяти или «удаление» управляемые объекты (как вещи, которые вы не можете сделать и то, что сборщик мусора там), то для обработки удаления/освобождения неуправляемых ресурсов или другие управляемые ресурсы, которые имеют выпущенные элементы, такие как SqlConnection
. Это конечно не будет null
ссылкой, но может сделать его непригодным с момента удаления вперед.
Как я могу сделать это как null или освободить память, занимаемую этим объектом ??
Если вы хотите обнулить ссылку, просто dt = null
будет работать, хотя это не даст вам никакой пользы, как экземпляр DataTable
ссылается grdView.DataSource
. Оба dt
и grdView.DataSource
будут ссылками на тот же базовый пример DataTable
.
Я также подозреваю, что это часть метода, и в этом случае dt
- метод в любом случае.
Вам не нужно слишком беспокоиться об этом. Меня больше беспокоит наличие SqlConnection
за пределами try-finally
/using
, вы рискуете оставить там доступ.
Я, как правило, в пользу вызова Dispose
по вопросам, которые реализуют IDisposable
за то, что я думаю, что это очень хорошая причина: это публичный договор. Факт того, что вызов его делает что-либо или нет, представляет собой деталь реализации и является , подлежащий изменению в момент уведомления.
Как и в сторону, я бы полностью переписать код:
var dt = new Datatable();
using (var conn = new SqlConnection(""))
using (var comm = new SqlCommand("sp_getData", conn))
{
conn.Open();
using (var reader = comm.ExecuteReader())
{
dt.Load(reader);
}
}
grdView.DataSource = dt;
Спасибо, что ответ запутан. Каков вывод? – Tohid
Обязательно вызовите 'Dispose()', но он ничего не делает. По сути, использование dispise на объектах не требуется. – MoonKnight