Sowohl ASP.NET Web Forms als auch MVC sind beim Zugriff auf Sitzungsvariablen („Session“) mit einiger Vorsicht zu genießen:
Access to the session state is per session exclusive, which means that a request to the session state applies an exclusive lock on the session object. Other requests trying to access the same session object concurrently will then have to wait until the first request has completed and released the lock. On the other hand, concurrent requests accessing different sessions can be handled concurrently.
D.h. bei vielen Anfragen hängt unter Umständen die Performance deutlich nach unten durch. Wir haben das selbst auch schon erlebt.
Dann ist oft im IIS-Live-Zugriffs-Log zu sehen, dass es viele Einträge mit „AcquireRequestState“ gibt. Das deutet darauf hin, dass zu viele Anfragen kommen, und die Session-Zugriffe der Flaschenhals sind.
Es gibt hier verschiedene Ansätze, die Verwendung des eingebauten Sessions-Handlings zu umgehen. Z.B.:
- Die
SessionStateBehaviour
-Enumeration auf MVC-Controller anwenden. Unter Web Forms geht das mit demEnableSessionState
-Attribut in der Page-Direktive. - Mit eigenen Session-Cookies arbeiten.
- Mit Redis arbeiten. Z.B. hier oder hier als fertiger Ersatz-Session-Provider.
- Hier noch eine Bibliothek mit anderen Alternativen.
- Anonymous Identification in MVC aktivieren und nutzen.
Ich selbst nutze bisher noch fast nichts davon, ab und zu die SessionStateBehaviour
-Enumeration.
In ASP.NET Core ist das Verhalten des eingebauten Session-Handlings wohl besser steuerbar.