1

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

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

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

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

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

感谢您的帮助。

4

1 回答 1

2

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

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

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

于 2014-12-18T06:44:11.413 回答