【问题标题】:Performance consideration for updating 100 records更新 100 条记录的性能考虑
【发布时间】:2012-12-27 10:46:23
【问题描述】:

我正在开发一个具有 SCQL CE 4.0 数据库的应用程序,并且我使用 EF 4.3.1 作为其 ORM。 有一个要求,我必须从 XML 文件中加载 100 条记录,对照数据库检查它们(通过它们的 GUID 列),如果它们是新的,则插入它们,但如果其中一些已经存在,我必须更新这些记录。

现在我想知道满足此要求的最佳方法是什么?

目前我正在使用以下代码,但我认为它效率不高。

foreach( var record in xmlRecords )
{
    var existingRecord = context.Records.SingleOrDefault(r => r.Guid == record.Guid);
    if( existingRecord == null )
        context.Records.Add(record);
    else
        context.Records.ApplyCurrentValues(record);
 }

 context.SaveChanges();                

【问题讨论】:

  • 我不知道这个框架,但我认为唯一好的建议 - 在处理 SQL 或外部数据库时 - 只是使用它们自己的函数,不要在 C 中塑造你的业务逻辑或C++ 或您使用的任何语言,只需在 SQL 文档中搜索适当的函数,然后只使用这些函数并让它们为您完成工作。
  • 我完全不同意 user1824407...我认为您在将业务逻辑保留在应用程序中而不是在数据层中的做法是正确的。

标签: performance entity-framework sql-server-ce entity-framework-4.3


【解决方案1】:

这个没问题,其他的就是让存储过程以XML作为输入,然后用XML编写插入和更新命令,但是SQL CE不支持XML数据类型

【讨论】:

    【解决方案2】:

    目前我正在使用以下代码,但我认为它效率不高。

    听起来像你的作品。您是否进行过处理 100 条记录的测试运行?有什么理由要进一步优化吗?如果您的代码可以合理地处理 100 条记录(在这种情况下,我认为合理的是不到一两秒)并且这是您的要求,那么您就完成了。实体框架,我想所有其他 ORM 都可以轻松处理更新 100 行。如果您担心将来需要处理更多记录,请创建一个包含适当数量记录的大测试文件并查看它的执行情况。从那里优化。

    如果它坏了,不要修理它。在您的代码无法处理负载之前不要进行优化。您的用户将无法分辨 1.1 秒和 1.1222 秒之间的区别。

    如果您确实需要优化某些东西,我会将您对运行缓慢的假设抛在脑后。这几乎不是你所期望的。在你的代码中加入一些计时器语句,看看是什么让你变慢了。

    希望对您有所帮助。

    【讨论】:

    • 这不完全是为了客户满意度,而是为了更好的编程。
    • 你的代码对我来说看起来很干净。更好的编程更多是关于它是否有效(即它是否满足用户要求),以及你能否维护它。优化通常会使您的代码更复杂,即更难维护。除非你有理由,否则不要这样做。如果您的代码难以理解,或者运行缓慢,那么我会说重构/优化。否则我就不管了。此外,您可能会将时间花在对这种优化产生更大影响的其他任务上。祝你好运
    猜你喜欢
    • 2018-07-28
    • 2012-07-25
    • 2017-01-09
    • 2014-08-15
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多