我使用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