在IIS 7.5 (Windows 7)下运行的ASP.NET网站非常缓慢

14

我刚在我的台式电脑上安装了 Windows 7 x64 Ultimate。我安装了 IIS、Visual Studio 2008、注册了 ASP.NET 等。

我正在处理的这个 ASP.NET 3.5 网站在新的 IIS 上运行极慢。在 STA 和 PROD 服务器(Windows 2003 Server)以及旧的 XP/IIS 5.1 上都可以顺畅运行。

通常需要 1-2 秒钟才能加载的页面,现在需要 8 秒钟!

我在 IIS 论坛上看到了这篇文章。它提到了 Vista/7 不会池化连接(仅供参考,该网站是在本地运行的,但它要连接到一个托管在远程服务器上的 SQL Server 2005)。

似乎需要一段时间“开始加载”页面... 我的意思是,我点击刷新按钮,它会停留几秒钟“等待本地主机”... 然后当它得到响应时,它就会正常地加载整个页面...

我不知道如何强制 Win7/IIS7.5 池化数据库连接。

编辑:我创建了一个新的空 ASP.NET Web 应用程序来查看是否也存在问题。答案是否定的,它以应有的速度快速响应一个空默认页面。也许与数据库连接有关。我将进行进一步测试。应该有办法解决这个问题...

编辑 2:调试应用程序后,我发现延迟发生在执行 .NET 代码之后(Page_Load 等)... 因此,延迟似乎出现在 IIS 将页面提供给浏览器时。


我认为这是一个很好的适合在serverfault.com上发布的候选问题... - ChristopheD
1
应用程序配置在我看来是编程/开发的重要组成部分。 - Russell
虽然与编程有些相关,但开发人员需要了解这种类型的知识,因为他们必定会遇到它。 - slugster
1
在您的Win7桌面上,页面载入需要8秒时,您是唯一使用该应用程序的人吗?当XP花费1-2秒钟时,您也独自进行测试吗?您的应用程序仅为单个页面打开一次DB连接吗? 如果以上答案都是肯定的,则这不应与连接池有关。除非您设置了最小池大小,否则CP仅适用于第二次及后续使用连接,而不是第一次使用连接。 - Timores
是的,我是唯一在7和XP上使用该应用程序的人。该应用程序会多次打开和关闭连接。 - empz
1
顺便提一下,"ASP.NET"是一个单词。 - John Saunders
4个回答

5
对于遇到相同问题的人,这里有两种可能的解决方案。
  • 1)禁用Firefox中的IPv6支持(仅适用于Firefox)
大多数作者都建议采用这种方法作为最快和最干净的解决方案。你需要做的就是在Firefox中打开配置设置(about:config),将network.dns.disableIPv6设置为true即可。
  • 2)更改您hosts文件中的localhost设置(所有浏览器通用)
这个想法是让我检查在我的机器上如何干预IPv6设置的地方。我看到上述来源中的一条评论说,你可以通过在url中将localhost替换为机器名称来摆脱这个问题。
我很快就验证了,发现禁用我的IPv6本地主机查找和直接在Firefox中禁用IPv6可以达到相同的效果。
你需要做的就是在您的hosts文件中注释/删除这一行:
#::1             localhost

注意:::1 表示 IPv6 对应于 IPv4 的 127.0.0.1 查找地址。
我认为第二种解决方案可能更适合不想完全禁用 IPv6 的用户,而第一种解决方案则适用于所有其他仍未在常规工作中使用 IPv6 的用户。

@IanDevlin,它正在工作,但如果再次出现问题,我会编辑问题并包含在内。 - empz

3
我遇到了相同的问题:在Windows 7 64位操作系统下,使用Core 2 Duo处理器、4GB内存和3个应用程序池进程只运行1个网站时,IIS 7.5的站点性能极其缓慢。以下是我采取的措施,让IIS速度恢复正常,问题得以解决...
对我来说,关键在于按照Microsoft在IIS.net上的指示,使用32位工作进程来运行IIS,您可以在此处阅读相关内容:

http://learn.iis.net/page.aspx/201/32-bit-mode-worker-processes/

提供简单的解决方案(我不想在这里重新编写)...您可以从Windows命令提示符运行1行命令,或者从Windows PowerShell运行1行命令。我只是从命令行运行它(确保您以管理员身份打开命令行或PowerShell--右键单击>以管理员身份运行)。

谢谢, 马蒂·麦基


我不知道你为什么想这样做,但你确定不是因为IPv6吗?这是一个已知的错误。 - empz
我所知道的是,IIS.net网站建议在Windows 7 64位上使用32位工作进程,正如链接所述。我完全不知道它是否与IPv6有任何关系。我只知道我在本地计算机上运行本地站点时,64位处理器下的IIS非常缓慢,而32位处理器下则非常快。如果有帮助的话——我在Windows 2008 Server 64位上没有必要这样做,因为IIS 64位工作进程在该操作系统上运行得很好。对我来说,Windows 7是另一回事。 - Marty McGee
但是你尝试过按照被接受的答案所说禁用ipv6吗? - empz

1
我知道原帖是在运行IIS 7.5,所以这可能不适用于他,但我发布这个帖子是因为它可能会帮助其他运行IIS Express 8.0的用户。我遇到了同样的问题,IPv6或hosts文件更改对我都没有用。我的asp.net MVC4项目在本地主机上刷新js更改后非常缓慢。它发生在所有浏览器上 - Chrome、FF和IE。最终我发现,当提供js文件时,IIS Express 8.0非常缓慢,似乎存在一个bug。如果我在命令行上运行iisexpress并按F5键,我可以看到每个js文件需要4或5秒钟才能加载。
最终我卸载了IIS 8.0并安装了IIS express 7.5,问题立即得到解决。以下是我遵循的步骤:
- 卸载IIS express 8.0 - 删除IISExpress文件夹(在Win 7中它位于我的文档\IISExpress) - 安装IIS express 7.5(链接到IIS Express 7.5下载

看起来IIS Express 8.0已经随着VS 2012安装,所以如果你进行了新安装或可能是服务包更新,这可能会升级之前的IIS Express版本。


1

您可以尝试将多个进程作为应用程序池运行:

  • 打开 IIS
  • 点击应用程序池
  • 右键单击您的应用程序的应用程序池,并单击“高级设置”
  • 找到“最大工作进程”并将其更新为 3(或您想要允许运行的进程数)。

更新到3... 没有任何变化... 看起来需要一段时间才能“开始加载”页面... 我的意思是,我点击刷新后,它会停留几秒钟的“等待本地主机”... 然后当它得到响应时,它正常地加载整个页面... - empz
听起来像是每个请求都在重新激活服务。请检查服务的保持活动超时是否设置为零。 - Russell
3
这是极其糟糕的建议。在过去的一周里,我一直在优化自己的应用程序,看到了很多这种类型的评论。这个应用程序池设置的命名非常不恰当。它应该被分为两个设置,一个叫做“使用 Web Garden”(逻辑性),另一个叫做“设置 Web Garden 节点数量”(数字>1)。在几乎没有真实世界的使用情况下,你想要使用 Web Garden。http://blogs.msdn.com/b/david.wang/archive/2006/03/14/thoughts-on-application-pools-running-out-of-threads.aspx - Christopher
谢谢你的信息,Christopher - 我总是乐于学习 :) 我会把它留在这里以备将来参考。 - Russell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接