我们遇到了一个实体框架的问题,当我们第一次在一个非常简单的对象插入上执行SaveChanges时,延迟了2-4秒。我已经缩小了这个范围(通过蚂蚁性能分析器)来查看世代。我已经看过并遵循了关于用EdmGen或T4模板生成视图的文章,但是这并没有帮助:.Views.cs文件只包含SELECT语句,而不是UPDATE或INSERT语句。使用预编译查询、缓存查询等对EF和性能进行了大量讨论,但讨论的中心都是选择,而不是隐藏在SaveChanges()后面的插入或更新。
获得EF生成INSERT视图的唯一方法是尝试在服务启动时插入我知道将失败的行,例如将外键设置为不应该存在的ID。对我来说这绝对是荒谬的。有更好的办法吗?我并不关心它是在编译时还是在服务启动时发生的,但是有什么方法可以强制EF生成所有(基本的)更新和插入视图吗?让服务的第一个用户等待2-4秒插入一行是不可接受的。
我们现在使用的EF 4,但我们将跳转到EF 5和.NET 4.5,如果必要的话,以解决这个问题。
编辑:进一步的研究表明,尽管在创建/编译更新视图时第一次在表上调用SaveChanges()时存在开销,但它可以忽略不计(30-40 is )。分析它使它看起来比它是由于巨大的调用堆栈更糟糕。我最初的时间为2-4秒,最后被分解为其他开销,例如:创建第一个上下文:1600 My第一个EF操作(该操作加载或创建查询视图)400 My(如果预编译),否则3000+ms与远程数据库的初始连接:500 My。
发布于 2012-10-04 06:02:32
进一步的挖掘显示,与其他开销相比,生成更新视图的时间微不足道,不需要进行任何特殊处理。
https://stackoverflow.com/questions/12684036
复制相似问题