-1

我想做一个多次插入,所以我会传递一组数据,我不知道从性能角度看哪种方法更好。

传递这样的数据表或对象列表:

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



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

1 回答 1

1

由于这些实际上都没有显示任何插入代码,因此评论毫无意义。一般来说说起来,这里的任何 C# 的性能都将与与可能位于 LAN 上另一台计算机上的进程外数据库服务器的通信延迟相形见绌。然而!是的,库实现可能会有所作为。例如,Entity Framework 和 NHibernate 都是具有大量抽象和复杂性的大型复杂产品 - 因此有时可能会产生可衡量的开销。其他库故意简单和轻量级,真正有效地处理 90% 的场景,并且不费心支持硬的 10%。但是:你没有说明你正在使用什么库(如果有的话),所以我们不能评论。同样,在诸如此类的事情中存在内置开销DataTable- 但您只会在处理非平凡的批量大小时才会注意到它们。

如果您想要尽可能快的SqlBulkCopy性能,那么通过 an下降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);
}

请注意,批量插入并不是每天插入数据库的方法:同样,这是为了适应特定场景(有效插入大量数据)。

于 2013-10-28T08:48:09.900 回答