在我遇到实现SqlBulkCopy和性能测试的麻烦之前,我想知道是否有人对何时应该使用它有任何指导,以及是否更可以在相对较小的数据集上使用(1000行左右) 。在这种情况下使用它是否有任何开销,或者在插入合理数量的行时是否总是使用它?
答案 0 :(得分:1)
我可能将用于1000行,但您可以使用命令批处理来执行类似的操作。
请注意,对于1000行,最简单的方法可能是将所需数据抛出到正确形状的DataTable
中,这非常简单。对于较大的集合,写一个定制的IDataReader
(流式传输记录,而不是先将它们全部缓存在内存中)是我的首选。
要注意的另一件事是交易,耐用性等;当使用SqlBulkCopy
时,我倾向于使用它来推入 staging 表,然后调用sproc(或只是一个简单的TSQL命令)将数据推送到真实表。除了基于单个集合(并完全记录)INSERT
之外,这样可以使真实表保持清洁。
但是如果你只想测量表现,把它扔到真正的表中应该可以得到一个大概的估计。
答案 1 :(得分:1)
SqlBulkCopy不会在事务日志中写入,这比手动插入每行更快。
即使是1000行,也应该有速度增益,特别是如果它是高度访问的操作,例如来自Web应用程序。