实体框架 - 不同环境下的不同行为

时间:2014-01-25 12:35:47

标签: c# asp.net performance wcf entity-framework

我最近开始使用Entity Framework(版本4.1)和WCF。 我正在尝试创建一个n层asp.net应用程序(.Net Framework 4.0),其中数据层由内部使用实体框架的wcf服务组成。实体框架采用的方法是模型优先。

在我的开发环境中,我在同一个网站和相同的应用程序池下运行IIS 7.5上的asp.net应用程序和wcf服务(它不是很好,但它可以工作)。在第一次访问任何wcf服务时,性能非常差,但在后续访问中它是可以的。第一次访问时性能不佳的原因解释为here - 例如与视图生成,查询准备等相关的开销,

完成开发后,我建立了一个包含2个虚拟机的测试环境 - 一个托管应用程序前端的服务器(IIS 7.5)和另一个托管wcf服务的虚拟机(再次运行IIS 7.5)机器,在不同的网站和不同的应用程序池下。

我期待相同的行为,即对服务的首次访问速度较慢以及执行速度较快的后续访问,但对服务的所有访问都运行缓慢。

问题不在于查询很重,而且不是网络问题。我已经执行了一个实体框架分析工具,显然在每次调用wcf服务时都会产生生成视图和编写查询的开销。查询的执行速度很快。

基本上我正在试图找出为什么我注意到不同环境中的不同行为。

根据我的阅读,每次创建AppDomain时,实体框架都会执行与初始开销相关的操作。但这是否意味着每次调用WCF服务都会创建一个新的AppDomain?

1 个答案:

答案 0 :(得分:0)

我明白了。显然,开发机器的设置安装了2011年6月的.Net Framework CTP,测试环境机器具有标准的.Net Framework 4.0。我已经在所有机器上升级到.Net Framework 4.5,现在一切都按预期工作了。

显然,.Net 4.0上的实体框架,在每个请求中都会引入生成视图和编译查询的开销。在框架及以上版本的4.2版本中,行为更像是文献中描述的内容:开销仅发生在第一次访问时。

WCF AppDomain由IIS应用程序池创建,可在多个请求中重复使用。

感谢您输入Narayana