【问题标题】:Why is IIS slower than ASP.NET Development Server?为什么 IIS 比 ASP.NET 开发服务器慢?
【发布时间】:2012-10-08 21:09:33
【问题描述】:

我有一个 ASPX 网页,它执行一些复杂的操作和数据库调用。当我通过运行 ASP.NET Development Server (Cassini) 查看网页时,大约需要 200ms

然后,没有任何代码更改和配置更改,我将网站部署到我的本地计算机 IIS 7 并再次查看相同的网页。它需要 2.0 秒,这慢了 10 倍

我认为 IIS 应该比 Cassini 更快(或至少与 Cassini 一样快。

为了进一步调查,我创建了一个新页面 test1.aspx,它只包含一个在 Page_Load 中运行了 9000 万次的空 for 循环。在 Cassini 中,大约需要 200 毫秒。在 IIS 中,它需要 300 毫秒(慢 50%)。

导致 IIS 比 Cassini 慢的原因可能是什么?或者,也许是一个更好的问题,我怎样才能使 IIS 运行至少和 Cassini 一样快?

【问题讨论】:

    标签: asp.net performance iis cassini


    【解决方案1】:

    快速而简短的回答:

    配置 Web 应用程序使用的应用程序池以启用 32 位应用程序:

    详细演练:

    我使用了一些performance profiling tools(一些是free)来比较性能并找出瓶颈。免费的EQATEC Profiler 足以让我比较运行 Cassini 和 IIS 生成的两个报告并确定导致问题的方法。但是,该方法包含的行太多,我无法确定导致问题的确切行。

    然后Redgate ANTS 就派上用场了。通过使用行级细节分析该方法,我发现它的 RegEx 运行非常缓慢。

    进一步搜索将我带到这里的答案:RegEx.Match is much slower in IIS compared to Development Server (Cassini)。我正在使用带有 IIS 7 的 Windows 7 64 位。将“启用 32 位应用程序”设置为 True 可以解决问题。


    另外,关于以 32 位或 64 位运行 IIS 的一些相关阅读:

    64 位服务器在用于数据库时更有效 SQL Server 或其他数据管理服务器(比方说,企业 电子邮件服务器(例如 Exchange),而不是 处理服务器,例如 IIS 或其管理的工作进程。

    每次查找都需要 64 位指针,这将使 一切都慢了一点。

    来源:What are the pros and cons of running IIS as 32bit vs 64bit on a 64bit OS?

    【讨论】:

    • 你只列出了一些极端情况,没有提到Cassini只是一个玩具,没有强大的安全性/长管道/内核-用户模式分离/应用程序池(这可能会损害性能,但对于生产级 Web 服务器)。通过可扩展性,您仍然可以在 IIS 上以可接受的性能为许多用户提供服务,而 Cassini 永远无法达到相同水平的稳健性。
    • @LexLi,我打算让这个页面成为可能使 IIS 运行速度比 Cassini 慢的原因的存储库。您是否介意作为单独的答案解释您提到的因素如何给 IIS 带来巨大影响,以及纠正它们的方法?
    • 非常感谢,我已经浪费了很多时间来搜索优化等。现在我知道为什么我的 IIS 很慢了。
    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多