【问题标题】:ASP.NET MVC slow on host?ASP.NET MVC 在主机上运行缓慢?
【发布时间】:2012-07-08 19:28:30
【问题描述】:

我已将我的ASP.NET MVC(3) site 上传到我的主机,但它的网站在第一次加载所有页面时要慢很多(即使没有获取数据)?

我第一次访问起始页需要7.30 s,如果我在 1 分钟后点击重新加载,则需要1.05 s,如果我重复点击重新加载,它将在500 ms800 ms 之间给我。

如果我在大约 5 分钟后返回并点击重新加载,我会再次获得 7 s 加载吗?

如果我从我的 localhost(IIS7) 运行相同的 websight,我将第一次获得 1 s,然后是 650 ms 以便快速重新加载。

网页正在使用数据库,但在这两种情况下使用的是相同的数据库(即放置在我的主机上)。

网页是www.biss.se

我应该从哪里开始寻找?

编辑:

这是我的 Application_Start()

protected void Application_Start()
{
    AccountModel accountModel = new AccountModel();
    AreaRegistration.RegisterAllAreas();

    RegisterRoutes(RouteTable.Routes);
    MappingHandler.RegisterMappings();

    #region Register Extra DataNotations for Display Attribute
    ModelMetadataProviders.Current = new DisplayMetaDataProvider();
    #endregion


    if (!accountModel.CheckIfAdminAccountExists("adminAccount"))
    {
        accountModel.CreateUser("adminAccount",
                                    "Admin",
                                    "Admin",
                                    "",
                                    "",
                                    postCode: "",
                                    locationId: "",
                                    inactive: false,
                                    siteRole: Controllers.SiteRoles.Admin,
                                    activatedByUser: true);
    }

}

【问题讨论】:

  • 您是使用共享网站托管、运行自己的服务器还是使用 VPS? (我假设您使用的是网站主机?)
  • 如果您使用的是共享主机,这是正常的。像 Winhost 这样的主机通常只给你的 MVC3 应用程序 100MB 内存,一旦达到这个阈值,达到一定的不活动时间,整个应用程序池就会被回收。浏览片刻后你感觉的滞后可能是你的记忆力达到了顶峰。
  • @MadBurn :是的,这是一个共享主机,但我的朋友 www.bradspel.net 在同一主机(同一服务器)上运行得很快,这是一个 ASP.NET Webform 3.5 站点(无 MVC) .
  • @Sergio Tapia :谢谢,我会联系我的主人,看看是否有什么可以帮助我的,但我想确保我不会在 ASP.NET MVC 上做错任何事情导致性能下降。
  • 请注意,这是第一次针对每个 pageView,因此它不仅是访问的第一页。请尝试。

标签: asp.net asp.net-mvc performance


【解决方案1】:

当第一个请求到达 ASP.NET 应用程序时,该应用程序由 Web 服务器通过创建 AppDomain 加载到内存中,并执行 Application_Start 中的代码。此过程可能需要更多或更少的时间,具体取决于您在此事件中执行的操作以及要加载的程序集的数量。在一段时间不活动或达到某些内存/CPU 阈值后,IIS 可以回收应用程序并将其从内存中卸载。在下一个请求中重复相同的过程。

所以基本上你应该寻找的是你在 Application_Start 事件中执行的任务,该事件在第一个请求时执行。如果这些任务涉及 I/O 操作,例如数据库访问或其他内容,您可以记录执行它们所需的时间。通过这种方式,您将能够查明需要很长时间的代码的确切过程,并能够在取决于您的情况下对其进行修复,或者如果他们有问题,请联系您的托管服务提供商。

MiniProfiler 是用于此分析目的的绝佳工具。

【讨论】:

  • 谢谢,有趣!我已经用 Application_Start 更新了我的帖子,我们可以看到那里有各种各样的工作。另外,localhost上应该存在同样的问题,但它不存在吗?我将研究 MiniProfiler。我还可以提一下,一位朋友正在同一台主机上运行bradspel.net,这是一个常规的 ASP.NET 3.5 网站,而且速度要快得多。
  • 我还必须补充一点,如果您尝试访问本网站上的任何其他页面,您第一次会注意到同样的缓慢延迟,因此如果它不是每次都回收,它似乎不是 application_start请求。
  • 本地主机上不一定存在同样的问题。在 localhost 上,您可能直接连接到某个本地数据库或其他东西。如果您说每个请求都遇到同样的缓慢,那么似乎每个数据库访问都有问题。我想您将不得不联系您的网络托管服务提供商的支持人员。我们无法帮助您。问题似乎与您的代码无关。在此之前,请使用分析器测量执行查询所需的时间并能够查明问题。
【解决方案2】:

您应该查看您的 IIS 设置。 IIS 关闭所有在一段时间内没有被请求访问的站点。

因此,如果几分钟内没有请求,站点将从内存中卸载并需要

这就是你在本地和远程机器上有不同行为的原因。 有时主机会阻止此设置,原因是一台虚拟机上客户端的内存使用率低。

我不记得要更改的设置。应该有人给出更肯定的答案。

【讨论】:

    【解决方案3】:

    在 IIS8 Windows2012 服务器上运行的 ASP.MVC3 应用程序具有相同的行为。

    如果您确定自己在做什么,您可以配置 IIS 以保持您的应用程序池处于活动状态。

    解决办法可以在here on G+找到

    最重要的是配置应用程序池的空闲超时设置。

    【讨论】:

    • 请尝试阅读此stackoverflow.com/help/deleted-answers,以进一步了解如何回答。即:“没有从根本上回答问题的答案”:仅是指向外部网站的链接。如果可能,请通过提取解决方案扩展您的答案
    【解决方案4】:

    如果您转到高级设置,应用程序池,那么您可以看到最大工作进程属性并将值设置为 2,而不是 1。

    我就是这样解决了我的问题。

    【讨论】:

    • 请详细说明您对问题的回答。
    猜你喜欢
    • 2018-08-31
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多