В настоящее время я использую DataTable для получения результатов из базы данных, которую я могу использовать в своем коде.
Тем не менее, многие примеры в Интернете показывают использование DataSet вместо этого и доступ к таблицам через метод коллекций.
Есть ли какое-либо преимущество, с точки зрения производительности или иного, от использования DataSets или DataTables в качестве метода хранения результатов SQL?
Ответы:
Это действительно зависит от типа данных, которые вы возвращаете. Поскольку DataSet (по сути) представляет собой просто набор объектов DataTable, вы можете возвращать несколько различных наборов данных в один и, следовательно, более управляемый объект.
С точки зрения производительности у вас больше шансов получить неэффективность из-за неоптимизированных запросов, чем из-за «неправильного» выбора конструкции .NET. По крайней мере, таков мой опыт.
источник
Одно из основных отличий заключается в том, что DataSets могут содержать несколько таблиц, и вы можете определять отношения между этими таблицами.
Если вы возвращаете только один набор результатов, я бы подумал, что DataTable будет более оптимизирован. Я бы подумал, что должны быть некоторые накладные расходы (хотя и небольшие), чтобы предлагать функциональные возможности DataSet и отслеживать несколько DataTables.
источник
в 1.x раньше были вещи, которые DataTables не могли делать, а DataSets могли (не помню, что именно). Все это было изменено в 2.x. Я предполагаю, что именно поэтому во многих примерах все еще используются DataSets. DataTables должны быть быстрее, поскольку они более легкие. Если вы выбираете только один набор результатов, это лучший выбор между ними.
источник
Одна из особенностей DataSet заключается в том, что если вы можете вызывать несколько операторов select в ваших хранимых процедурах, DataSet будет иметь по одному DataTable для каждой.
источник
Есть некоторые оптимизации, которые вы можете использовать при заполнении DataTable, например, вызов BeginLoadData (), вставку данных, а затем вызов EndLoadData (). Это отключает некоторые внутренние функции DataTable, такие как обслуживание индекса и т. Д. См. Эту статью для получения дополнительных сведений.
источник
В любом случае, когда вы имеете дело только с одной таблицей, самое большое практическое различие, которое я обнаружил, состоит в том, что DataSet имеет метод HasChanges, а DataTable - нет. Однако у обоих есть «GetChanges», так что вы можете использовать его и проверить значение null.
источник
Объект DataTable представляет табличные данные в виде табличного кэша строк, столбцов и ограничений в памяти. DataSet состоит из набора объектов DataTable, которые можно связать друг с другом с помощью объектов DataRelation.
источник