相关疑难解决方法(0)

如何"热身"实体框架?它何时变得"冷"?

不,我的第二个问题的答案不是冬天.

前言:

我最近一直在对Entity Framework进行大量的研究,而且一直困扰着我的是它在查询没有预热时的性能,所谓的冷查询.

我浏览了Entity Framework 5.0 的性能注意事项.作者介绍的概念,温暖寒冷的查询,以及他们如何不同,这我也注意到自己不知道它们的存在.在这里值得一提的是,我背后只有六个月的经验.

现在我知道如果我想在性能方面更好地理解框架,我还可以研究哪些主题.不幸的是,互联网上的大多数信息都是过时的或者是主观性的,因此我无法找到关于Warm vs Cold查询主题的任何其他信息.

基本上我到目前为止注意到的是,每当我必须重新编译或回收点击时,我的初始查询变得非常慢.正如预期的那样,任何后续数据读取都是快速的(主观的).

我们将迁移到Windows Server 2012,IIS8和SQL Server 2012,作为一名少年,我实际上赢得了在其他人之前测试它们的机会.我很高兴他们推出了一个预热模块,可以让我的应用程序为第一个请求做好准备.但是,我不确定如何继续升温我的实体框架.

我所知道的是值得做的:

  • 按照建议提前生成我的观点.
  • 最终将我的模型移动到单独的程序集中.

通过常识,我认为做的可能是错误的做法:

  • 在Application Start中执行虚拟数据读取,以便加热,生成和验证模型.

问题:

  • 什么是在我的实体框架上随时获得高可用性的最佳方法?
  • 在什么情况下实体框架再次"冷"?(重新编译,回收,IIS重启等)

asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

118
推荐指数
3
解决办法
2万
查看次数

实体框架初始化是缓慢的 - 我可以做些什么来更快地引导它?

我的EF 4.3.1模型有200多个表.最初的启动很糟糕,几分钟.DotTrace捕获的配置文件意味着在框架深处有一些可怕的算法/可伸缩性选择,这可以通过数百万次调用那些方法以及3600万个IEnumerable.Contains()调用来证明.这是一个片段,这是由在数据库上完成的第一个查询触发的(未来的查询不会这样做并且没问题).

在此输入图像描述

我可以对我的模型做些什么来减轻痛苦?我能以某种方式预先编译吗?更好的是,EF团队可以解决这些问题或开源框架,以便我可以吗?或者至少修正拼写Warapper?:)

编辑:一个特定的EF调用触发这个基本上是var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault();.此外,EF Migrations Seed()AddOrUpdate可以有效地生成相同的堆栈.更完整的堆栈跟踪,可能会提供更多的上下文,在这里:富勒堆栈跟踪

编辑:一些相关链接:

EDIT2:现在他们刚刚开源代码,看来这行:

//Filter the 1:1 foreign key associations to the ones relating the sets used in these cell wrappers.
oneToOneForeignKeyAssociationsForThisWrapper =
    oneToOneForeignKeyAssociationsForThisWrapper.Where(
        it => (it.AssociationEndMembers.All(endMember => entityTypes.Contains(endMember.GetEntityType()))));
Run Code Online (Sandbox Code Playgroud)

是需要一些工作的人.当它可能没有时,它正在使用O(n ^ 2)算法,但我还没有仔细观察.

编辑3:令人高兴的是,看起来EF6中的工作正在修复此代码:http://entityframework.codeplex.com/discussions/396130

c# performance entity-framework-4 entity-framework-4.3

36
推荐指数
2
解决办法
1万
查看次数