Wenn ich einen leeren Session_Start-Handler in Global.asax.cs erstellen, verursacht dies einen erheblichen Treffer beim Rendern von Seiten im Browser.Warum verursacht Session_Start in Global.asax.cs Leistungsprobleme?
Wie zu reproduzieren:
Erstellen Sie eine leere ASP.NET MVC 3 Web-Anwendung (I MVC 3 RC2 verwende). Dann eine Heimsteuerung mit diesem Code hinzufügen:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Number(int id)
{
return Content(id.ToString());
}
}
nächstes eine Ansicht Home/Index.cshtml erstellen und die folgenden im BODY-Abschnitt platzieren:
@for (int n = 0; n < 20; n++)
{
<iframe src="@Url.Content("~/Home/Number/" + n)" width=100 height=100 />
}
Wenn Sie diese Seite nicht ausführen, Sie‘ ll sehen 20 IFRAMEs erscheinen auf der Seite, jede mit einer Zahl darin. Alles, was ich hier mache, ist eine Seite zu erstellen, die 20 weitere Seiten hinter den Kulissen lädt. Bevor Sie fortfahren, notieren Sie, wie schnell diese 20 Seiten geladen werden (aktualisieren Sie die Seite einige Male, um die Ladevorgänge zu wiederholen).
Neben Ihrem Global.asax.cs gehen und fügen Sie diese Methode (ja, das Verfahren Körper ist leer):
protected void Session_Start()
{
}
nun wieder die Seite auszuführen. Dieses Mal werden Sie feststellen, dass die 20 IFRAMEs viel langsamer geladen werden, eine Sekunde nach der anderen. Das ist seltsam, weil wir in Session_Start eigentlich nichts machen ... es ist nur eine leere Methode. Aber das scheint genug zu sein, um die Verlangsamung in allen folgenden Seiten zu verursachen.
Weiß jemand, warum das passiert, und besser noch hat jemand eine Lösung/Workaround?
aktualisieren
ich, dass dieses Verhalten tritt nur entdeckt haben, wenn der Debugger (mit F5 ausgeführt wird) angebracht ist. Wenn Sie es ohne den angehängten Debugger (Strg-F5) ausführen, scheint es in Ordnung zu sein. Also, vielleicht ist es kein großes Problem, aber es ist immer noch seltsam.
Ich stieß auf dieses Problem auf AJAX-Anfragen in einer SPA-Anwendung. Hat mich davon abgehalten, SessionState zu benutzen. – voam