【问题标题】:Which one is faster: Entity Framework vs stored procedures?哪个更快:实体框架与存储过程?
【发布时间】:2012-11-22 01:41:03
【问题描述】:

当涉及在 ARRAY 对象中插入大量数据(例如 100.000 行)时, 你认为哪个会更快?

  1. 通过实体框架? (当您插入 100.000 行时,请致电 SaveChanges()
  2. 使用INSERT 存储过程循环每一行(100.000 次)?

如果你也能提供一个参考,那就太棒了。

谢谢

【问题讨论】:

  • 您可以将数据传递给存储过程的XML参数。
  • 那么它是如何通过存储过程使用 TVP 进行测量的呢?我希望它比上面列出的 1 或 2 快约 100 倍(见答案)

标签: asp.net .net sql-server stored-procedures entity-framework-4


【解决方案1】:

其实最快的方法是使用SqlBulkCopy对象,它就是专门为这种情况设计的

【讨论】:

    【解决方案2】:

    存储过程会更快。实体框架没有批处理,因此除了访问数据库 10 万次之外,您还要承受 EF 的性能开销。对于这类东西,Raw ado 将比 ORM 更快。

    这里是一些比较的链接http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html它在比较中没有原始的 ado.net,但 dapper 是您将看到的最接近它的速度。

    【讨论】:

    • Hmm.. 我大约在一分钟前进行了测试,平均这里是插入 100.000 行的结果:EF 为 21467 毫秒,SP 为 41133 毫秒(继续已经打开的连接,而不是重新交易过程中打开或关闭)
    • 对,100K 的循环无论如何都会很慢。 TVP 将降低您最昂贵的成本 - 网络 10 万倍。
    • 我想这可能取决于您在存储过程中所做的事情,您是否测试过将简单插入作为基准?以我自己的经验,原始 sql 总是快得多。你用的是什么版本的EF? Bryanmac 是正确的,无论如何 100k 连接都会很慢。
    • 我先尝试了 EF,然后我会公布我的计算结果。但从来没有机会尝试你的方式。今天我会这样做,然后我会在这里分享结果作为答案。非常感谢 FettMo。
    【解决方案3】:

    循环 100K 次调用存储过程将至少创建 100K 跨进程和/或跨网络调用会很慢。

    如果您使用的是 SQL Server,另一种选择是使用 TVP (table value paramaters) 以避免在 C# 代码的循环中调用 insert。它允许您在一次调用中将数据表传递给存储过程。

    从上面的链接中,他们建议一次 1000 行(但始终为您的应用测量和试验):

    使用表值参数与其他使用方式相当 基于集合的变量;但是,经常使用表值参数 对于大型数据集可以更快。与批量操作相比 启动成本高于表值参数,表值 参数在插入少于 1000 行时表现良好。

    所以,也许可以尝试循环 100 次,一次通过 1000 行(而不是越过边界 100K 次)。

    您可能还想重新评估为什么 asp.net 在您的应用程序中一次有 10 万个项目。这是否会传递到服务器并立即保存在内存中,可能存在内存问题?那能拆吗?您是否在 asp.net 正在读取和处理 100K 行的情况下进行数据处理,而 sql server 代理作业可能更合适?如果您提供有关应用的数据流及其功能的更多详细信息,人们可能会提供更多选择。

    【讨论】:

    • 此方法大约每 5 小时左右运行一次。这就是为什么我估计大约有 10 万个项目。
    • 那么,它是如何测量 100 个循环发送 1000 行 TVP 的呢?我的猜测是比你的两个选项快约 100 倍。
    • 1) 循环 SP 100k 次:40 秒 2) 使用 EF 插入 100k 项:19 秒 3) 插入 100k 项的表值:1 秒.. 谢谢布莱恩!这太棒了。
    • 酷 - 确保批次中的项目不是无限的。我会闯入 1000 并循环。它可能不会那么快,但它会防止在 5 小时内运行 AT 或 SQL 内存不足的峰值,因为它通过了表中的设置。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2012-04-02
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多