使用数据表或对象列表进行多次插入

时间:2013-10-28 08:37:52

标签: c# asp.net collections system.data.datatable

我想进行多次插入,因此我将传递数据集,并且我不知道哪种方法在性能视图中更好。

传递数据表或对象列表,如下所示:

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



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

1 个答案:

答案 0 :(得分:1)

由于这两个实际上都没有显示任何插入代码,因此评论是没有意义的。 通常来说,任何C#的性能都会因为与进程外数据库服务器(可能是在LAN上不同的计算机上)进行通信的延迟而大大相形见绌。然而!是的,库实现可能会有所作为。例如,实体框架和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);
}

请注意,批量插入是每天日常插入数据库的方式:再次,这是适合特定方案(有效插入大量数据) )。