长时间运行数据库操作

时间:2013-07-13 11:32:27

标签: c# linq-to-sql

我需要使用c#运行一次操作:

它比下面的代码复杂得多但仍然如此 像这样的东西:

using (DB1DataContext db1 = new DB1DataContext())
{
    int count = db1.tbale1.Count();
    int currentIndex = 0;
    while (currentIndex < count)
    {
        var obj= db1.table1s.Take(1).Skip(currentIndex).FirstOrDefault();
        using (DB2DataContext db2 = new DB2DataContext())
        {
            tableA tb = new table1();
            db2.tableAs.InsertOnSubmit(tb);
            db2.SubmitChanges();
        }
        currentIndex++;
    }    
}

一个循环大约需要500毫秒,循环次数约为15000,这意味着操作大约需要125分钟。

这会起作用还是存在某些问题?

编辑:正如我之前提到的,只是想知道是否有任何时间限制将停止操作

1 个答案:

答案 0 :(得分:0)

超时,因为您一次只执行一次SubmitChanges。基本上,这将为每条记录执行一次交易。

所以它会起作用,但它可以更有效率。

将第二个datacontext的创建移出循环。为什么你甚至使用两个?

移动db2.SubmitChanges();跳出循环。但是,这确实意味着您将遇到超时问题,但速度会更快。

在db1.tbale1上做一个foreach,因为现在你的skip + take会使它在数据库方面非常低效。你正在艰难地抓取一条记录。

PS - 由于你没有在本节中获得任何特定的linq-2-sql好处,你可以在这部分中删除linq并使用SQLBulkCopy,它会更快一些