相关疑难解决方法(0)

实体框架 - 添加 75k 行需要多长时间?

我有以下设置:

  • Table1 - 当前有 150k 行,需要添加另外 25k 行,
  • Table2 - 300k 行,需要另外添加 50k。

我在循环中添加行,如下所示(首先是 EF 代码):

using (var context = new MyDb())
{
  loop() //25k rounds
  {
    var t3 = new Table2();
    var t2 = new Table2();
    var t1 = new Table1{prop1 = t2, prop2 = t3};
    context.Table1.Add(t1);
    context.SaveChanges();
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,循环总共需要 25k 圈,我的性能测量显示,它将在大约10 小时内添加这些行!现在我不知道这是因为这是使用 EF 进行此类操作的正常时间,还是因为我的 dbms 有问题?

c# entity-framework

2
推荐指数
1
解决办法
1413
查看次数

如何改进实体框架批量插入

我有一个应用程序,它从多个套接字接收数据,然后将数据写入数据库。

我目前正在使用 EF 来执行此操作。我想知道如何才能提高效率。

我读到,批量插入速度更快,所以我只每 500 个插入保存对数据库的更改:

   db.Logs_In.Add(tableItem);
            if (logBufferCounter++ > 500)
            {
                db.SaveChanges();
                logBufferCounter = 0;
            }
Run Code Online (Sandbox Code Playgroud)

现在我已经分析了应用程序,74% 的工作是由该函数完成的:System.Data.Enitity.DbSet'1[System._Canon].Add

有没有更好的方法来进行插入?也许将表项排队到列表中,然后将整个列表添加到数据库上下文中。

或者也许我看错了,我应该完全避免使用 EntityFramework 来实现更高性能的插入?目前它是我的应用程序中的瓶颈,如果我查看系统资源,SQL 似乎根本没有动过眼睛。

所以我的问题:

1:如何在多次插入中实现最高效/最快的插入

2:如果EF可以接受,我该如何改进我的解决方案?

我使用的是 SQL Server 2012 企业版,传入的数据是恒定的流,但是我可以缓冲它,然后执行批量插入(如果这是更好的解决方案)。

[编辑]

进一步解释该场景。我有一个线程在并发队列上循环,该线程使该队列中的项目出列。然而,由于数据库插入是瓶颈。队列中通常有数千个条目,因此,如果还有一种异步或并行方式,我可能会利用多个线程来执行插入。

c# sql entity-framework bulkinsert insert

1
推荐指数
1
解决办法
792
查看次数

使用Entity Framework写入大量记录需要花费太多时间

我正在开发一个项目,它只使用Entity Framework代码首先插入相对大量的记录(250K记录,只有2列).

但是将所有记录写入数据库需要花费太多时间(2~3小时)!

是因为实体框架很慢,有大量或记录或什么?

PS

代码段:

foreach (var t in myCollection)
{      
  Db.Words.Add(t);
  Db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

.net c# database entity-framework

1
推荐指数
1
解决办法
1064
查看次数

获取实体框架中最近插入的行的 ID

我根据以下帖子将行批量插入到表中(它有一个标识列,每次插入新行时都会自动递增)

/sf/answers/415952351/

插入所有行后,如何获取最近插入的行的 id 列表?

谢谢

c# sql entity-framework

1
推荐指数
1
解决办法
1304
查看次数

标签 统计

c# ×4

entity-framework ×4

sql ×2

.net ×1

bulkinsert ×1

database ×1

insert ×1