事实证明,在 Azure 中使用应用程序初始化仍然非常缓慢

mat*_*mmo 7 iis azure

我的假设是,如果我在 Azure 中打开 IIS8 应用程序预热,那么我的所有站点在加载时都会相当即时,但情况并非如此

所以,基本上,我已经打开preloadEnabled并将 设置startModeAlwaysRunning,使用:

public class WebRole : RoleEntryPoint
{
    public override void Run()
    {
        using (var serverManager = new ServerManager())
        {
            foreach (var application in serverManager.Sites.SelectMany(c => c.Applications))
            {
                application["preloadEnabled"] = true;
            }

            foreach (var appPool in serverManager.ApplicationPools)
            {
                appPool["startMode"] = "AlwaysRunning";
            }

            serverManager.CommitChanges();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还使用以下启动任务禁用了 IIS 应用程序池的回收和定期 IIS 重新启动:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.time:00:00:00
Run Code Online (Sandbox Code Playgroud)

在我的每个站点中,我都在 web.config 中添加了以下内容:

<system.webServer>
    <applicationInitialization skipManagedModules="true">
        <add initializationPage="/" />
    </applicationInitialization>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

但是,我所有的网站在第一次点击时仍然需要 30 秒。如果我在访问任何站点之前远程访问机器,我可以看到所有设置都应用在 IIS 中。我还可以看到这些站点空闲大约 60-80MB 的内存(暗示它们已被预加载)。

我的问题是,这和预加载一样好吗?当然是为了更快?我希望延迟最小,第一次加载可能是 2 或 3 秒?

Mat*_*les 0

虽然不能直接回答您的问题,但您也许可以利用 Azure 中的新监视功能来保持您的网站正常运行。

如果您查看云服务下的管理门户,会看到一个标有“Web 端点状态”的部分。如果设置该值,Azure 将每隔几分钟左右轮询该页面。