我尝试预编译Azure WebApplication,因此第一次点击并不会在页面的每次首次点击时花费几秒钟时间。Azure预编译似乎不起作用
我有下面的代码在我WebRole.Run()
:
using (var server_manager = new ServerManager())
{
var main_site = server_manager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
var main_application = main_site.Applications["/"];
var main_application_pool = server_manager.ApplicationPools[main_application.ApplicationPoolName];
string physical_path = main_application.VirtualDirectories["/"].PhysicalPath;
main_application["preloadEnabled"] = true;
main_application_pool["autoStart"] = true;
main_application_pool["startMode"] = "AlwaysRunning";
server_manager.CommitChanges();
Log.Info("Building Razor Pages", "WebRole");
var build_manager = new ClientBuildManager("/", physical_path);
build_manager.PrecompileApplication();
Log.Info("Building Razor Pages: Done", "WebRole");
}
它似乎并没有抛出任何异常,当我看着日志大约需要55秒做build_manager.PrecompileApplication()
。
似乎对我很正确。
除了当我第一次尝试加载页面时仍会受到打击。如果我看看MiniProfiler,我特别看到Find部分需要很长时间。我仍然怀疑这是汇编,因为1.5秒找到一个文件似乎对我来说有点长。
有什么毛病我上面的方法呢?有没有办法检查页面是否真的编译?而且,在编译为的情况下,还能有什么?为什么o为什么东西太复杂了......
你能试着从这个问题http://stackoverflow.com/q/10830044/57428的代码,看看它是否有差别? – sharptooth
假设VirtualPath是“/”,问题中的代码似乎是相同的。或者你的意思是添加第三个'null'参数或额外的ClientBuildManagerParameters? –
不,我的意思是枚举应用程序的所有'VirtualDirectories'并使用它们的路径。与直接传递'/'相比,可能会有一些愚蠢的细微差别。 – sharptooth