【问题标题】:Entity Framework - Different behavior on different environments实体框架 - 不同环境下的不同行为
【发布时间】:2014-02-16 12:07:43
【问题描述】:

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

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

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

我期待相同的行为,即第一次访问服务很慢,随后的访问执行得更快,但是对服务的所有访问都运行得很慢。

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

基本上我是想弄清楚为什么我会在不同的环境中注意到不同的行为。

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

【问题讨论】:

  • 是否有机会在开发箱中调试构建并在测试环境中发布?

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


【解决方案1】:

我想通了。显然,开发机器的设置安装了 .Net Framework 的 2011 年 6 月 CTP,测试环境机器安装了标准的 .Net Framework 4.0。我已在所有机器上升级到 .Net Framework 4.5,现在一切正常。

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

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

感谢您的意见,纳拉亚纳

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2018-08-01
    • 2018-10-30
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多