Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个实体写入数据库时,什么更快:Add()添加循环中的每个项,或者AddRange()添加对象列表?_C#_.net Core_Ef Core 3.0 - Fatal编程技术网

C# 将多个实体写入数据库时,什么更快:Add()添加循环中的每个项,或者AddRange()添加对象列表?

C# 将多个实体写入数据库时,什么更快:Add()添加循环中的每个项,或者AddRange()添加对象列表?,c#,.net-core,ef-core-3.0,C#,.net Core,Ef Core 3.0,假设我们正在编写一个数据导入应用程序,我们将向数据库中添加许多类似的实体,比如说100万个。我们在代码中创建对象,然后将它们分批写入数据库 哪种情况更好: 在创建对象时,我们使用dbcontext.Add(object)在创建结束时 在创建对象时,我们将它们添加到列表objectsToSave.add(object)

假设我们正在编写一个数据导入应用程序,我们将向数据库中添加许多类似的实体,比如说100万个。我们在代码中创建对象,然后将它们分批写入数据库

哪种情况更好:

  • 在创建对象时,我们使用
    dbcontext.Add(object)在创建结束时
  • 在创建对象时,我们将它们添加到列表
    objectsToSave.add(object)dbcontext.AddRange(objectsToSave)
  • 在这两种情况下,我们都调用
    dbcontext.SaveChanges()


    两者的性能会有很大的差异吗?

    我猜它们是一样的。尚未向数据库分配任何内容。首先,你应该自己来衡量这一点。实际上,你可能想重新评估这是否是插入那么多数据的好方法——好吧,那些特定的调用并不是为此而设计的。作为澄清的一点,你为什么要一次加载那么多数据?这是某种初始数据加载还是什么?如果是这样,大多数数据库系统都有某种类型的大容量插入功能,你可能会想考虑这样做。这能回答你的问题吗?AddRange速度更快,但这与实体跟踪有关,而与实际插入无关。插入的实际动作是相同的(生成的sql语句相同,执行时的行为也相同)。