我使用LinqToSql从C#向SqlServer 2008 express数据库插入大量记录。它看起来像插入是非常缓慢的。以下是代码片段。使用Linq to Sql非常缓慢的插入过程
public void InsertData(int id)
{
MyDataContext dc = new MyDataContext();
List<Item> result = GetItems(id);
foreach (var item in result)
{
DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
dc.Items.InsertOnSubmit();
}
dc.SubmitChanges();
}
我做错了什么?或者使用Linq插入大量记录是不好的选择?
更新:感谢所有的答案。 @ p.campbell:对不起,记录计数,这是一个错字,实际上是大约100000.记录也范围到200K以及。
根据所有的建议,我把这个操作分成几部分(也是一个需求变更和设计决策),并以小块的形式检索数据,并在它们到达时将它们插入到数据库中。我已经将这个InsertData()方法放在线程操作中,并且现在使用SmartThreadPool来创建25个线程池来执行相同的操作。在这种情况下,我一次只插入100条记录。现在,当我使用Linq或sql查询时,它在时间方面没有任何区别。
根据我的要求,此操作计划每小时运行一次,并为大约4k-6k用户提取记录。因此,现在我将每个用户数据(检索并插入数据库)作为一项任务并分配给一个线程。现在整个过程大约需要45分钟,大约有25万条记录。
有没有更好的方法来完成这种任务?或者任何人都可以建议我如何改进这个过程?
有多少条记录,以及该操作需要多长时间?这里使用了哪些数据类型? – 2010-09-20 11:43:52
超过1000000条记录,主要是字符串数据类型但不超过10个字段。 – JPReddy 2010-09-20 12:36:10
无论如何,一百万张插页需要时间。我怀疑,如果您复制生成的SQL语句(全部100万个语句),并且特别运行它们,您将看不到与Management Studio差别很大的SQL语句! – 2010-09-20 13:17:33