我正在做一个非常复杂的项目。对象图包含一棵具有两个层次的树中的大约30个对象(有子对象)。
该实体在浏览器中进行管理,并作为Json发送到Web端点。端点将JSON序列化到复杂实体中,然后存储库使用GraphDiff保存实体。
在第一次保存时,UpdateGraph调用大约需要12秒,而对同一实体的后续调用则需要毫秒。
我假设图是每个实体( EF DbContext )缓存的。
有什么方法可以优化第一次呼叫吗?当我们使用GraphDiff时,我们只有几个场景,也许有一种方法来准备应用程序中使用的图形。
谢谢你的帮助。
发布于 2014-12-18 06:44:11
我通过从GraphDiff中克隆GitHub源代码并对其进行修改来解决这个问题。
GraphDiff动态地检测实体的键,而且由于动态查询表达式是如何生成以检索已经保存的对象的,所以每次使用新实体(另一个主键)进行查询时,该表达式都由EF重新编译。因此,编译后的查询不只是在以前使用实体键时才被缓存。在我的例子(10s)中,这些查询编译花费了大量时间。
对源代码进行了修改,允许注入已经持久化的实体。这意味着不让GrahpDiff从DB检索实体,而是以最优的方式检索它,并注入到GraphDiff中。
https://stackoverflow.com/questions/27063661
复制相似问题