Должен ли я Dispose () DataSet и DataTable? - PullRequest
186 голосов
/ 27 мая 2009

DataSet и DataTable оба реализуют IDisposable, поэтому, согласно общепринятым рекомендациям, я должен вызывать их методы Dispose ().

Однако из того, что я читал до сих пор, DataSet и DataTable на самом деле не имеют никаких неуправляемых ресурсов, поэтому Dispose () на самом деле ничего не делает.

Плюс, я не могу просто использовать using(DataSet myDataSet...), потому что DataSet имеет коллекцию DataTables.

Итак, чтобы быть в безопасности, мне нужно перебрать myDataSet.Tables, избавиться от каждого из DataTables, а затем избавиться от DataSet.

Так стоит ли вызывать Dispose () для всех моих DataSets и DataTables?

Добавление:

Для тех из вас, кто считает, что DataSet следует утилизировать: В общем случае шаблон для удаления должен использовать using или try..finally, потому что вы хотите гарантировать, что будет вызван Dispose ().

Однако, это становится ужасно быстро для коллекции. Например, что вы делаете, если один из вызовов Dispose () выдал исключение? Вы проглатываете это (что «плохо»), чтобы вы могли продолжить уничтожать следующий элемент?

Или вы предлагаете мне просто вызвать myDataSet.Dispose () и забыть об удалении DataTables в myDataSet.Tables?

Ответы [ 11 ]

0 голосов
/ 27 мая 2009

Прежде всего, я бы проверил, что Dispose делает с DataSet. Может быть, поможет использование отражателя от Redgate.

...