3

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

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

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

如果我从本地主机(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);
    }

}
4

4 回答 4

7

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

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

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

于 2012-07-08T19:31:36.223 回答
1

您应该查看您的 IIS 设置。IIS 会关闭一段时间内未受到请求访问的所有站点。

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

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

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

于 2012-07-09T18:25:03.770 回答
0

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

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

可以在 G+ 上找到解决方案

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

于 2013-08-09T14:10:28.520 回答
-1

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

我以这种方式解决了我的问题。

于 2015-02-10T00:34:38.550 回答