0

我有一个操作需要使用 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 分钟。

这会工作还是有一些问题?

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

4

1 回答 1

0

不会超时,因为您一次执行一个 SubmitChanges。本质上,这将为每条记录执行一个事务。

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

将第二个数据上下文的创建移出循环。你为什么还要用两个?

移动 db2.SubmitChanges(); 跳出循环。然而,这确实意味着你会遇到超时问题,但它会更快。

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

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

于 2013-07-13T14:23:36.027 回答