Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 29669|Antwort: 3

[ASP.NET] ASP.NET mehrere Anfragen gleichzeitig auf der Seite gibt es eine blockierende Sperranimation

[Link kopieren]
Veröffentlicht am 22.09.2017 17:32:59 | | | |
Kürzlich, als ich an einem Projekt gearbeitet habe, mussten einige Seiten viele Daten laden, und manchmal klickte ich auf die Seite, ohne auf das Laden zu warten, und klickte dann erneut auf eine andere Seite

Beim Laden der Webseite wird es einen sehr langsamen Zustand der Suspendierung geben, also lassen Sie uns das heute genau untersuchen.

Zuerst dachte ich, dass diese Situation auf vielen Webseiten auftreten würde oder ein Problem mit der Geschwindigkeit meines Computernetzwerks, aber ich stellte fest, dass diese Seite dieses Problem nicht hatte, manchmal blieb ich beim Posten hängen, aber ich klickte auf andere Seiten im Tab, um schnell zu laden.

Schauen wir uns heute genauer an!! Der zuerst getestete Code:

Homeview-Code:

Controller-Code:



Für die Testcode-Analyse hat unser Controller drei Methoden: eine ist die Startseite, die anderen beiden sind Testmethoden

Die Test1-Anfrage blockiert für 5 Sekunden und gibt dann Daten an den Benutzer zurück

Test2-Anfragen blockieren nicht und geben Daten direkt an den Benutzer zurück

Unsere Startseite zeigt zwei Schnittstellen für Ajax-Anfragen, also asynchrone Anfragen, sodass es kein Blockierungsproblem gibt.

Wir werden feststellen, dass die Test1-Methode Inhalte erst ausgibt, nachdem Test2 Inhalte ausgegeben hat (Normalerweise gibt die Seite den von Test2 zurückgegebenen Inhalt direkt aus und wartet dann 5 Sekunden, um den von Test1 zurückgegebenen Inhalt auszugeben, da js nicht blockiert



Dann greifen wir direkt auf die Test1- und Test2-Schnittstellen zu, zuerst auf Test1 und dann sofort auf Test2, und stellen fest, dass Test2 warten muss, bis Test1 zum Vollständigen zurückkehrt, wie in der untenstehenden Abbildung gezeigt:



Wenn eine Seitenanfrage eine Lesersperre setzt, können andere Anfragen, die gleichzeitig in derselben Sitzung verarbeitet werden, den Sitzungszustand nicht aktualisieren, aber zumindest können sie gelesen werden. Wenn eine Seite eine Schreibsperre für den Sitzungszustand anfordert, werden alle anderen Seiten blockiert, unabhängig davon, ob sie Inhalte lesen oder schreiben möchten. Wenn zum Beispiel zwei Programmansichten gleichzeitig Inhalte in derselben Sitzung schreiben, muss ein Programm warten, bis das andere Programm fertig ist, bevor es geschrieben werden kann. In der AJAX-Programmierung ist es wichtig, sich dessen bewusst zu sein.

Besonderer Hinweis: Nur beim Schreiben einer Sitzung blockieren Asp.net die Anfrage, aber solange du die Seite besucht hast, auf der die Sitzung geschrieben wurde, zum Beispiel die Operation nach dem Einloggen im System mit der Sitzung (die Sitzung ist natürlich bis zum Ablauf gesperrt, es ist nur so, dass die SessionID gleich ist). Es wird dieses Problem geben.

Informationen zum Internetnutzer

Solange die Website eine Sitzung verwendet, sperrt jede Anfrage die Sitzung während ihrer gesamten Lebensdauer, sodass Anfragen mit derselben Sessionid warten müssen, um freigeschaltet zu werden

Das bedeutet, dass die Website, wenn sie eine zeitgesteuerte Seite hat, nichts tun kann und man warten muss, bis die zeitgesteuerte Seite geladen ist.

Du kannst es auch nicht machen, mehrere Ajax-Gleichzeitanfragen auf derselben Seite, du kannst es nicht, Nachrichten-Polling-Anfragen.



Zusammengefasst:Wenn Sie eine Sitzung zur Anfrage führen, wenn Sie keine Sitzung zur Anfrage bringen, wird die oben genannte Situation nicht eintreten

Lösung:

Die Funktion SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) wurde dem Controller-Controller hinzugefügt

Anmerkung:

Erforderlich bedeutet, dass Sie eine exklusive Sperre für die Sitzung anfordern (d. h. keine parallele Verarbeitung von Anfragen für dieselbe SessionID)
ReadOnly bedeutet, dass du eine nicht-exklusive Sperre für die Sitzung anfragst (d. h. deine Anfrage muss noch warten, bis Anfragen mit exklusiver Sperre abgeschlossen sind, aber du kannst Anfragen mit nicht-exklusiven bearbeiten Parallele Schlösser eingebaut. Es liegt jedoch an dir, sicherzustellen, dass dein Code nicht in Session geschrieben wird. Es wird nicht unbedingt vom Rahmen durchgesetzt)
Required bedeutet den von dir angeforderten Session-Mutex (d. h. es besteht keine Verpflichtung, dieselbe SessionID parallel zu verarbeiten).

ReadOnly bedeutet, dass die von dir angeforderte Sitzung eine nicht-exklusive Sperre ist (d. h. deine Anfrage muss noch auf den Abschluss warten, die Anfrage für eine exklusive Sperre, aber du kannst eine Anfrage mit einer parallelen nicht-exklusiven Sperre bearbeiten). Aber du solltest sicherstellen, dass dein Code keine Sitzungen schreibt. Es muss nicht vom Framework ausgeführt werden)





Vorhergehend:CEF: Einen Chrome für den Client einbetten
Nächster:HTTP-Fehler 503. Der Service ist nicht verfügbar.
Veröffentlicht am 06.07.2018 11:53:31 |
Für WebForms fügen Sie nach der Seite oben auf aspx ein (laden Sie einfach die blockierende Seite):

EnableSessionState="Nur-Lesen"
 Vermieter| Veröffentlicht am 14.07.2019 20:34:17 |
Die meisten Webentwicklungen verwenden Sitzungen, um Sitzungszustände zu speichern, aber die Verwendung von Sitzungen in asp.net Anwendungen kann erhebliche Auswirkungen auf die Leistung von Webanwendungen haben. Warum und was sie beeinflussen wird, wird unten analysiert

Die MSDN-Erklärung der gleichzeitigen Anfragen und der Sitzung lautet:

Gleichzeitige Anfragen und Sitzungsstatus
Der Zugriff auf den ASP.NET-Sitzungszustand erfolgt pro Sitzung, das heißt, wenn zwei verschiedene Benutzer gleichzeitig eine Anfrage senden, wird gleichzeitig Zugriff auf jede einzelne Sitzung gewährt. Wenn jedoch die beiden gleichzeitigen Anfragen für dieselbe Sitzung gelten (unter Verwendung desselben SessionID-Werts), erhält die erste Anfrage exklusiven Zugriff auf die Sitzungsinformationen. Die zweite Anfrage wird erst nach Abschluss der ersten Anfrage ausgeführt. (Wenn die exklusive Sperre der Sitzungsinformationen freigegeben wird, weil die erste Anfrage die Sperrzeit überschreitet, erhält auch die zweite Sitzung Zugriff.) Wenn Sie den Wert EnableSessionState in der @Page-Direktive auf ReadOnly setzen, führen Anfragen nach lesgeschützten Sitzungsinformationen nicht zu einer exklusiven Sperre der Sitzungsdaten. Allerdings müssen Schreibanfragen an Sitzungsdaten möglicherweise noch warten, bis die Sperre aus der von den Sitzungsdaten gesetzten Lese-/Schreibanfrage entsperrt ist.
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com