C# 将多个实体写入数据库时,什么更快:Add()添加循环中的每个项,或者AddRange()添加对象列表?
假设我们正在编写一个数据导入应用程序,我们将向数据库中添加许多类似的实体,比如说100万个。我们在代码中创建对象,然后将它们分批写入数据库 哪种情况更好:C# 将多个实体写入数据库时,什么更快:Add()添加循环中的每个项,或者AddRange()添加对象列表?,c#,.net-core,ef-core-3.0,C#,.net Core,Ef Core 3.0,假设我们正在编写一个数据导入应用程序,我们将向数据库中添加许多类似的实体,比如说100万个。我们在代码中创建对象,然后将它们分批写入数据库 哪种情况更好: 在创建对象时,我们使用dbcontext.Add(object)在创建结束时 在创建对象时,我们将它们添加到列表objectsToSave.add(object)
dbcontext.Add(object)代码>在创建结束时
objectsToSave.add(object)在列表中有1000个对象之后,我们调用dbcontext.AddRange(objectsToSave)代码>
dbcontext.SaveChanges()在dbcontext中将1000个项目排入队列以插入后,返回代码>
两者的性能会有很大的差异吗?我猜它们是一样的。尚未向数据库分配任何内容。首先,你应该自己来衡量这一点。实际上,你可能想重新评估这是否是插入那么多数据的好方法——好吧,那些特定的调用并不是为此而设计的。作为澄清的一点,你为什么要一次加载那么多数据?这是某种初始数据加载还是什么?如果是这样,大多数数据库系统都有某种类型的大容量插入功能,你可能会想考虑这样做。这能回答你的问题吗?AddRange速度更快,但这与实体跟踪有关,而与实际插入无关。插入的实际动作是相同的(生成的sql语句相同,执行时的行为也相同)。