Datatable против Dataset - PullRequest
       15

Datatable против Dataset

116 голосов
/ 05 августа 2008

В настоящее время я использую DataTable для получения результатов из базы данных, которую я могу использовать в своем коде.

Однако, многие примеры в Интернете показывают использование вместо этого DataSet и доступ к таблицам с помощью метода collection.

Есть ли какое-либо преимущество с точки зрения производительности или иным образом в использовании DataSets или DataTables в качестве метода хранения результатов SQL?

Ответы [ 6 ]

86 голосов
/ 05 августа 2008

Это действительно зависит от вида данных, которые вы возвращаете. Поскольку DataSet - это (фактически) просто набор объектов DataTable, вы можете вернуть несколько отдельных наборов данных в один и, следовательно, более управляемый объект.

С точки зрения производительности, вы скорее всего получите неэффективность от неоптимизированных запросов, чем от "неправильного" выбора конструкции .NET. По крайней мере, это был мой опыт.

21 голосов
/ 14 сентября 2008

Одним из основных отличий является то, что DataSets может содержать несколько таблиц, и вы можете определить отношения между этими таблицами.

Если вы возвращаете только один набор результатов, хотя я думаю, что DataTable будет более оптимизированным. Я бы подумал, что должны быть некоторые издержки (предоставленные небольшими), чтобы предложить функциональность, которую выполняет DataSet, и отслеживать несколько DataTables.

6 голосов
/ 05 августа 2008

Одна особенность DataSet состоит в том, что если вы можете вызывать несколько операторов select в ваших хранимых процедурах, DataSet будет иметь одну DataTable для каждой.

6 голосов
/ 05 августа 2008

в 1.x раньше были вещи, которые DataTables не могли сделать, какие DataSets могли (не помню точно, что). Все, что было изменено в 2.x. Я думаю, именно поэтому во многих примерах все еще используются DataSets. DataTables должны быть быстрее, поскольку они более легкие. Если вы используете только один набор результатов, ваш лучший выбор между ними.

3 голосов
/ 14 сентября 2008

Есть некоторые оптимизации, которые вы можете использовать при заполнении DataTable, например, вызов BeginLoadData (), вставка данных, затем вызов EndLoadData (). Это отключает некоторое внутреннее поведение в DataTable, такое как ведение индекса и т. Д. См. эту статью для получения дополнительной информации.

0 голосов
/ 05 декабря 2016

Когда вы имеете дело только с одной таблицей, самое большое практическое отличие, которое я обнаружил, состоит в том, что DataSet имеет метод «HasChanges», а DataTable - нет. Однако оба имеют «GetChanges», так что вы можете использовать его и проверить на ноль.

...