Ich ging davon aus, dass beim Aktivieren der IIS8-Anwendungserwärmung in Azure alle meine Websites beim Laden ziemlich sofort verfügbar sind. Dies ist jedoch nicht der Fall .
Also, im Grunde habe ich eingeschaltet preloadEnabled
und stellen Sie die startMode
zu AlwaysRunning
verwenden:
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();
}
}
}
Ich habe auch das Recycling der IIS-App-Pools und den regelmäßigen IIS-Neustart mithilfe der folgenden Startaufgabe deaktiviert:
%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
Auf jeder meiner Websites habe ich Folgendes in meine web.config eingefügt:
<system.webServer>
<applicationInitialization skipManagedModules="true">
<add initializationPage="/" />
</applicationInitialization>
</system.webServer>
Trotzdem dauern alle meine Websites beim ersten Treffer 30 Sekunden . Wenn ich eine Remote-Verbindung zum Computer herstelle, bevor ich auf eine der Sites treffe, werden alle Einstellungen in IIS angewendet. Ich kann auch sehen, dass die Sites etwa 60-80 MB Speicher im Leerlauf haben (was andeutet, dass sie vorinstalliert wurden).
Meine Frage ist, ist das so gut wie das Vorladen? Sicherlich soll es schneller sein? Ich hatte erwartet, dass die Verzögerung minimal ist, vielleicht 2 oder 3 Sekunden beim ersten Laden?