【问题标题】:Entity framework and performance实体框架和性能
【发布时间】:2009-03-22 18:28:07
【问题描述】:

我正在尝试使用实体框架开发我的第一个 Web 项目,虽然我喜欢使用 linq 而不是编写 sql 的方式,但我确实有一些严重的性能问题。我在一个表中有很多未处理的数据,我想对其进行一些转换,然后插入到另一个表中。我遍历所有对象,然后将它们插入到我的新表中。我需要做一些小的比较(这就是我需要将数据插入另一个表的原因),但是对于性能测试,我已经删除了它们。下面的代码(大约需要设置 12-15 个属性)花费了 21 秒,这是相当长的时间。它通常会这么慢吗?我可能会做错什么?

DataLayer.MotorExtractionEntities mee = new DataLayer.MotorExtractionEntities();
List<DataLayer.CarsBulk> carsBulkAll = ((from c in mee.CarsBulk select c).Take(100)).ToList();

foreach (DataLayer.CarsBulk carBulk in carsBulkAll)
{
    DataLayer.Car car = new DataLayer.Car();
    car.URL = carBulk.URL;
    car.color = carBulk.SellerCity.ToString();
    car.year = //... more properties is set this way

    mee.AddToCar(car);
}
mee.SaveChanges();

【问题讨论】:

  • 抱歉代码缩进错误...
  • 我已经尝试删除mee.SaveChanges,现在运行速度非常快,那么提交数据时会出现什么问题?

标签: performance entity-framework


【解决方案1】:

您不能使用实体框架创建批量更新。

假设您需要使用如下 SQL 语句更新表中的行:

UPDATE table SET col1 = @a where col2 = @b

使用 SQL,这只是到服务器的一次往返。使用实体框架,您(至少)有一次往返加载所有数据的服务器,然后您修改客户端上的行,然后它会将其发送回逐行

这会减慢速度,尤其是在您的网络连接受限且行数不止几行的情况下。

所以对于这种更新,存储过程仍然效率更高。

【讨论】:

    【解决方案2】:

    我已经对实体框架进行了很多试验,但没有发现任何真正的性能问题。

    您的代码的哪一行导致了很大的延迟,您是否尝试过调试它并只是测量哪种方法花费的时间最多?

    此外,您的数据库结构的复杂性可能会稍微降低实体框架的速度,但不会达到您所说的速度。您的数据库结构中是否存在一些“无限循环”?没有数据库结构,真的很难说哪里出了问题。

    【讨论】:

    • Wim,数据库结构很简单,没有任何关系,里面只有大约 15 个字段,这就是为什么我觉得保存更改需要 10-20 秒很奇怪只有 100 行?
    • 自从你发帖以来,我一直在这里对它进行更多的速度测试,使用我们为客户运行的数据库。这是一个相当复杂的数据库,创建 100 个新行,包含各种关系只需要 3 秒。我必须说,我让数据库在本地运行,这样可以加快速度
    【解决方案3】:

    你能在直接 SQL 中尝试同样的方法吗?

    问题可能与您的数据库有关,而不是与实体框架有关。例如,如果您有大量索引和大量检查约束,插入可能会变慢。

    我还发现插入从未备份过的数据库时出现问题。事务日志无法回收并且正在疯狂增长,导致单个插入需要几秒钟。

    直接在 SQL 中尝试此操作会告诉您问题是否确实出在 EF 上。

    【讨论】:

      【解决方案4】:

      我想我解决了这个问题。我一直在本地运行该应用程序,并且数据库在另一个国家/地区(邻国,但绝不会更少)。我尝试将应用程序加载到服务器并从那里运行它,然后只用了 2 秒而不是 20 秒。我尝试传输 1000 条记录,耗时 26 秒,这是一个相当大的更新,尽管我没有知道这是否是将 1000 条记录保存到数据库的“常规”速度吗?

      【讨论】:

        猜你喜欢
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        • 2015-11-25
        • 2011-11-16
        相关资源
        最近更新 更多