繁体   English   中英

在首次更新时优化GraphDiff性能(后续更新很快)

[英]Optimize GraphDiff performance on first update (subsequent updates are quick)

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

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

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

我假设该图是在EF DbContext中按实体缓存的。

有什么方法可以优化首次通话? 当我们使用GraphDiff时,只有几种情况,也许有一种方法可以准备在应用程序中使用的图形。

谢谢您的帮助。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM