我想做一个多次插入,所以我会传递一组数据,我不知道从性能角度看哪种方法更好。
传递这样的数据表或对象列表:
- public static int Insert(List<EndServReward> reward) //list of
objects
- public static int Insert(DataTable reward) //datatable
我想做一个多次插入,所以我会传递一组数据,我不知道从性能角度看哪种方法更好。
- public static int Insert(List<EndServReward> reward) //list of
objects
- public static int Insert(DataTable reward) //datatable
由于这些实际上都没有显示任何插入代码,因此评论毫无意义。一般来说说起来,这里的任何 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);
}
请注意,批量插入并不是每天插入数据库的方法:同样,这是为了适应特定场景(有效插入大量数据)。