Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top