Множественная вставка с использованием datatable или списка объектов

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

Передача таблицы данных или списка объектов, таких как это:

 - public static int Insert(List<EndServReward> reward) //list of
   objects



 - public static int Insert(DataTable reward) //datatable

1 ответ

Решение

Поскольку ни один из них фактически не показывает никакого кода вставки, комментировать это бессмысленно. Вообще говоря, производительность любого C# здесь будет значительно снижена из-за задержки взаимодействия с сервером базы данных вне процесса, который предположительно находится на другом компьютере в локальной сети. Тем не мение! Да, реализация библиотеки может изменить ситуацию. Например, Entity Framework и NHibernate являются большими сложными продуктами с большим количеством абстракций и сложностей, и в результате иногда могут быть измеримые накладные расходы. Другие библиотеки намеренно просты и легки, они действительно эффективно обрабатывают сценарии 90% и не заботятся о поддержке жестких 10%. Но: вы не указываете, какую библиотеку (если есть) вы используете, поэтому мы не можем комментировать. Кроме того, есть встроенные накладные расходы в таких вещах, как DataTable - но вы заметите их только при работе с нетривиальными размерами партии.

Если вы хотите максимально возможную производительность, то перейдите к SqlBulkCopy через IDataReader будет победителем - но это стоит делать, только если вы вставляете много данных: вам не нужно будет вставлять 20 строк. Но если вы вставляете 2000 строк, конечно! FastMember предоставляет сопоставленные свойства IDataReader реализация для вас - например:

using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(list, "Id", "Name", "Description"))
{ //           members to include, or omit for all ^^^^^^^^
    bcp.DestinationTableName = "SomeTable";
    bcp.WriteToServer(reader);
}

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

Другие вопросы по тегам