LINQ INSERTONSUBIM非常慢,与传统SQL插入语句相比
-
25-10-2019 - |
题
我有一份大量的插入工作,例如300000个插入物。
如果我以遗产方式这样做,我只需编写一个带有100个插入语句的块的SQL字符串,然后对DB执行执行权限(每个100个记录)。
每3秒钟左右,这范围约为100个插入物。
现在,当然有单个引号和插入值中的CRLF的问题。因此,与其编写代码以翻一番,依此类推,因为我懒惰,所以我与linq insertonsubmit和一个上下文相处。
而且,这比传统方式多20倍!!!
为什么?
解决方案
您不使用正确的工具来工作。 LINQ-TO-SQL和大多数其他ORM(至少实体框架和NHIBERNATE)是针对OLTP方案的,它们不是用于批量数据操作的目的,并且在用于批量数据操作时会缓慢执行。
你应该使用 SqlBulkCopy
.
其他提示
我也有同样的问题 InsertOnSubmit()
花很长时间。
但是,使用 DataTableHelper
类(可从下面的链接下载),并且仅更改代码的1或2行,您可以轻松地使用批量插入。
例如:
const int RECORDS_TO_INSERT = 5000;
List<Product> recordsToBeInserted = new List<Product>();
using (NorthwindDataContext dc = new NorthwindDataContext())
{
for (int n = 0; n < RECORDS_TO_INSERT; n++)
{
Product newProduct = new Product()
{
ProductName = "Product " + n.ToString(),
UnitPrice = 3999,
UnitsInStock = 2,
UnitsOnOrder = 0,
Discontinued = false
};
recordsToBeInserted.Add(newProduct);
}
// Insert this List<> of records into the [Products] table in our database, using a Bulk Insert
DataTableHelper.BulkCopyToDatabase(recordsToBeInserted, "Products", dc);
}
希望这可以帮助。
不隶属于 StackOverflow