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)
由于性能命中我已经改变InsertOnSubmit以InsertAllOnSubmit
if (tblLogList.Count >= 1000)
{
_trContext.tblLogs.InsertAllOnSubmit(tblLogList);
_trContext.SubmitChanges();
tblLogList.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
我可以通过InserAllOnSubmit()在Linq到Sql中插入的最大数量记录是多少.
通过我上面的代码,我获得了多达1000条记录,但我发誓,而代码可以通过一些记录,Timeout Exception因为它可以在我的实现中实现**windows service**.
我真的很困惑,处理上述逻辑的最佳建议是什么.
提前致谢.
虽然其他人正确地指出有更好的解决方案来完成这项任务,但还没有给出你问题的直接答案.
答案是,从技术上讲,数字要么受上下文吞噬所有这些新对象所占用的内存量的限制,要么受数据库事务日志的最大大小的限制.前者更有可能成为瓶颈,但是您可以通过以数百或数千块的形式提交记录并使用新的上下文(!)来防止达到两个限制.
如你所说,实际限制可能是命令超时(如果你不想让它永恒).这也可以通过批量提交来规避,从而为每个批次启动一个新命令.
的功能限制取决于之类的东西的过程是否是无人值守(耐性),以及所述数据是否预期一定量的时间内是可用的.如果这些要求很严格,您可能不得不求助于其他答案中建议的解决方案之一.