【问题标题】:Optimize GraphDiff performance on first update (subsequent updates are quick)首次更新时优化 GraphDiff 性能(后续更新很快)
【发布时间】:2014-11-21 14:31:15
【问题描述】:

我正在处理一个具有非常复杂实体的项目。对象图在一棵树中包含大约 30 个对象,分为两个级别(有子级的子级)。

实体在浏览器中进行管理,并作为 Json 发送到 Web API 端点。端点将 JSON 序列化为复杂实体,然后存储库使用 GraphDiff 保存实体。

第一次保存时,UpdateGraph 调用大约需要 12 秒,随后对同一实体的调用需要毫秒。

我假设图形在 EF DbContext 中按实体缓存。

有什么方法可以优化第一次调用吗?我们在使用 GraphDiff 时只有几个场景,也许有办法准备应用程序中使用的图形。

感谢您的帮助。

【问题讨论】:

    标签: entity-framework-6.1 graphdiff


    【解决方案1】:

    我通过从 GitHub 克隆 GraphDiff 源代码并修改它来解决它。

    GraphDiff 动态检测实体的键,并且由于生成动态查询表达式以检索已持久化对象的方式,每次使用新实体(另一个主键)时,表达式都会由 EF 重新编译查询。因此,仅当之前使用过实体键时,才会缓存已编译的查询。在我的案例中,这些查询编译花费了很多时间(10 秒)。

    修改了源代码以允许注入已持久化的实体。这意味着,不是让 GrahpDiff 从 DB 中检索实体,而是以最佳方式检索并注入以合并到 GraphDiff。

    【讨论】:

    • 嗨 Tibor ..我有同样的问题 :) 当我使用所有 includeStrings 执行 LoadEntity 时,我的 Attach() 需要很长时间。因此 GraphDiff 为 Merge 执行另一个实体查找。您以最佳方式检索实体的策略是什么?谢谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多