不,我的第二个问题的答案不是冬天.
前言:
我最近一直在对Entity Framework进行大量的研究,而且一直困扰着我的是它在查询没有预热时的性能,所谓的冷查询.
我浏览了Entity Framework 5.0 的性能注意事项.作者介绍的概念,温暖和寒冷的查询,以及他们如何不同,这我也注意到自己不知道它们的存在.在这里值得一提的是,我背后只有六个月的经验.
现在我知道如果我想在性能方面更好地理解框架,我还可以研究哪些主题.不幸的是,互联网上的大多数信息都是过时的或者是主观性的,因此我无法找到关于Warm vs Cold查询主题的任何其他信息.
基本上我到目前为止注意到的是,每当我必须重新编译或回收点击时,我的初始查询变得非常慢.正如预期的那样,任何后续数据读取都是快速的(主观的).
我们将迁移到Windows Server 2012,IIS8和SQL Server 2012,作为一名少年,我实际上赢得了在其他人之前测试它们的机会.我很高兴他们推出了一个预热模块,可以让我的应用程序为第一个请求做好准备.但是,我不确定如何继续升温我的实体框架.
我所知道的是值得做的:
通过常识,我认为做的可能是错误的做法:
问题:
asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我的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