我可以通过InserAllOnSubmit()在Linq到Sql中插入的最大记录数是多少

Raj*_*dev 5 .net c# linq performance linq-to-sql

我正在阅读Excel工作表并应用我的业务逻辑,我正在尝试插入使用Linq to SQL.

在我的循环中,我有> (greater than) 5,000 records< (Less than) 15,000 records插入.

public List<tblLog> tblLogList = new List<tblLog>(); 
Run Code Online (Sandbox Code Playgroud)

此方法在循环内部:

public void SaveLog()
{
    tblLog tnlog = new tblLog();
    tnlog.id = Guid.NewGuid();
    tnlog.comp_id = Comp_id;
    tnlog.branch_id = Branch_id;
    tnlog.row_id = rowID;
    tnlog.his_id = his_id;

    //Add records to List
    tblLogList.Add(tnlog);
Run Code Online (Sandbox Code Playgroud)

之前我曾尝试过这段代码逐一提交:

    //_trContext.tblLogs.InsertOnSubmit(tblLog);
    //_trContext.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

由于性能命中我已经改变InsertOnSubmitInsertAllOnSubmit

    if (tblLogList.Count >= 1000)
    {
         _trContext.tblLogs.InsertAllOnSubmit(tblLogList);
         _trContext.SubmitChanges();
         tblLogList.Clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 我可以通过InserAllOnSubmit()在Linq到Sql中插入的最大数量记录是多少.

  2. 通过我上面的代码,我获得了多达1000条记录,但我发誓,而代码可以通过一些记录,Timeout Exception因为它可以在我的实现中实现**windows service**.

    我真的很困惑,处理上述逻辑的最佳建议是什么.

提前致谢.

Ger*_*old 5

虽然其他人正确地指出有更好的解决方案来完成这项任务,但还没有给出你问题的直接答案.

答案是,从技术上讲,数字要么受上下文吞噬所有这些新对象所占用的内存量的限制,要么受数据库事务日志的最大大小的限制.前者更有可能成为瓶颈,但是您可以通过以数百或数千块的形式提交记录并使用新的上下文(!)来防止达到两个限制.

如你所说,实际限制可能是命令超时(如果你不想让它永恒).这也可以通过批量提交来规避,从而为每个批次启动一个新命令.

功能限制取决于之类的东西的过程是否是无人值守(耐性),以及所述数据是否预期一定量的时间内是可用的.如果这些要求很严格,您可能不得不求助于其他答案中建议的解决方案之一.