zoukankan      html  css  js  c++  java
  • Entity Framework 第一次查询时严重延迟的问题

    因为在园子里没有查到相关文章,所以发到首页让大家拍砖。

    起因:每次跑xUnit总是第一个测试需要十几秒的执行时间而其他最久0.5s都不到,我是个懒人发现这个问题的时候也没有去多想还是做手上的东西,但是心里的刺埋下了。(这里对xUnit说明下老鸟绕过,每个测试都是独立的对象,而我这个resharper的计算也是只计算每个实例的创建执行时间,因为xunit里创建实例的构造函数就是通常说的setup)

    QQ截图20110810131829

    有图有真相

    我走的弯路,可以直接绕过看结果:

    无脑的先用Test with performance;结果如下

    QQ截图20110810132822

    还以为看错了,linq编译怎么可能需要这么长时间,无脑的我去找ComplieQuery,心里还嘀咕“这个版本的EF不是会自动编译么,就算再编译这个时间级别也不太可能,难道是数据库访问的延时?。。。。。。”。

    结果在Google的时候发现大家对Pre-Generated Views 来提升性能相当热衷,好吧这个可能性大点,然后就是搞T4(真强大,没听过的同学可以去看看),结果人家已经在EFPowerTools里已经集成了。

    在项目里加上EFUnitOfWork.Views.cs心里真痛快,再跑跑,好吧不需要图了因为跟第一幅图差不多。

    这段话点醒了我,这个也太lazy了,不明白这样设计的道理,让初始化延迟到查询?

    the initialization of DbContext is lazy so creating an instance doesn't really do much until you actually use it. If you want to front load the initialization work you can call context.Database.Initialize(force: false). Note that passing false for the force parameter will only cause initialization to happen if it hasn't already. The init time depends a lot on the complexity of your model and what database initializer you are using. The best bet would be to run the profiler on it and see where the time is being spent, then we can probably help out with some suggestions.

    QQ截图20110810133803

    有图有真相

    没办法,还是用dottrace4.5吧,Database.Initialize用时最长,希望能对使用Ef的同学有点帮助,另外请对Ef有研究的同学赐教,不胜感激,Orz拜谢。

    PS:EF= Code Fist;PC=i5+8G ram+x64win7

  • 相关阅读:
    深入理解C++ 11新特性:1)
    Effective Java 第三版:1)
    Java 8 实战:2)
    MyBatis Plus
    Java 8 实战:1)
    十二要素应用宣言
    Dubbo 2):源码级
    [SCOI2009]windy数 数位dp
    [ZJOI2006]物流运输 最短路 动态规划
    [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/jinzhao/p/2133610.html
Copyright © 2011-2022 走看看