我嘗試預編譯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