16

我有一个 Windows Azure Web 角色,其中包含一个使用 ASP.NET MVC 的网站。当 HTTP 请求到达并首次加载页面时,视图(.aspx 或 .cshtml)会被编译,这需要一些时间,因此第一次提供页面所需的时间明显长于稍后提供同一页面的时间。

我已启用<MvcBuildViews>在此答案中描述)强制执行视图的编译时验证,但这似乎对站点部署和运行时的编译没有任何影响。

Azure Web 角色有所谓的启动任务,还有一种特殊的OnStart()方法,我可以在其中放置任何预热代码,所以一旦我知道要做什么,将其添加到角色中就不是问题了。

有没有办法强制编译所有视图?

4

5 回答 5

15

看看David Ebbo 的 Precompiled Razor Views

你为什么想这么做?

这样做的一个原因是避免在您的站点启动时出现任何运行时影响,因为在运行时没有任何东西需要编译。这在具有许多视图的站点中可能很重要。

此外,您根本不再需要部署 cshtml 文件,从而使部署文件集更小。

另一个很酷的好处是它使您能够对视图进行单元测试,这对于标准运行时编译模型来说一直是非常困难的。我将在以后的帖子中更详细地介绍这一点。

于 2012-05-16T12:41:33.347 回答
8

事实证明,可以使用ClientBuildManager.PrecompileApplication执行ASP.NET 预编译,并模仿按需编译行为,但只编译每个页面。试过了 - 第一次加载看起来明显更快。

重要的部分是作为ClientBuildManager构造函数参数传递的内容。解决方案是枚举所有对象和枚举.Applications中的每个项目,并使用和从每个项目作为构造函数的参数。Site.Applications.VirtualDirectoriesPathVirtualPathClientBuildManager

于 2012-05-16T14:28:03.730 回答
3

这是初始负载问题还是稳态问题?看到的一个问题是应用程序池回收问题,默认为 20 分钟超时。如果您禁用超时(或将其设置为较大的值),这是一个有效的解决方法吗?

这是另一个讨论 AppPool 超时以及如何禁用它的SO 答案。基本上:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00
于 2012-05-16T13:55:15.457 回答
1

将此添加到 OnStart:

  using (var serverManager = new ServerManager())
        {
            string siteName = RoleEnvironment.CurrentRoleInstance.Id + "_" + "Web";
            var siteId = serverManager.Sites[siteName].Id;
            var appVirtualDir = $"/LM/W3SVC/{siteId}/ROOT";  // Do not end this with a trailing /

            var clientBuildManager = new ClientBuildManager(appVirtualDir, null, null,
                                        new ClientBuildManagerParameter
                                        {
                                            PrecompilationFlags = PrecompilationFlags.Default,
                                        });

            clientBuildManager.PrecompileApplication();
        }
于 2016-09-25T15:22:16.877 回答
0

如果您使用 Visual Studio 的发布功能,则有一个更简单的选项:

在“发布”对话框 > “设置”窗格中,展开“文件发布选项”并选中“发布期间预编译”,然后单击“配置” 。在高级预编译设置对话框中,取消选中 允许预编译站点可更新

来源:https ://msdn.microsoft.com/en-us/library/hh475319.aspx

于 2017-05-04T14:55:48.953 回答