Набор данных объекта DataTable против



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



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



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

449   6  

6 ответов:

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.