我想进行多次插入,因此我将传递数据集,并且我不知道哪种方法在性能视图中更好。
- public static int Insert(List<EndServReward> reward) //list of
objects
- public static int Insert(DataTable reward) //datatable
答案 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);
}
请注意,批量插入不是每天日常插入数据库的方式:再次,这是适合特定方案(有效插入大量数据) )。