Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 29669|Odpowiedź: 3

[ASP.NET] ASP.NET wielu żądań jednocześnie na stronie pojawia się blokująca sytuacja zawieszonej animacji

[Skopiuj link]
Opublikowano 22.09.2017 17:32:59 | | | |
Ostatnio, gdy pracowałem nad projektem, niektóre strony musiały załadować dużo danych, a czasem klikałem na stronę, nie czekając na jej załadowanie, a potem klikałem na kolejną stronę

Podczas ładowania strony internetowej będzie bardzo wolny stan zawieszonej animacji, więc przyjrzyjmy się temu uważnie dzisiaj.

Na początku myślałem, że taka sytuacja pojawi się na wielu stronach lub problem z prędkością sieci komputerowej, ale okazało się, że ta strona nie miała takiego problemu – czasem utknąłem podczas publikowania, ale klikałem na inne strony w zakładce, żeby szybko się załadować.

Przyjrzyjmy się temu dziś bliżej!! Kod testowany jako pierwszy:

Kod Homeview:

Kod kontrolera:



Do analizy kodu testowego nasz kontroler ma 3 metody: jedną jest strona główna, a pozostałe dwie to metody testowe

Żądanie Test1 blokuje się przez 5 sekund, a następnie zwraca dane użytkownikowi

Żądania Test2 nie będą blokować i zwracają dane bezpośrednio do użytkownika

Nasza strona główna to dwa interfejsy dla żądań Ajax, które są asynchroniczne, więc nie ma problemu z blokowaniem.

Stwierdzimy, że metoda Test1 generuje treść dopiero po tym, jak Test2 wygeneruje treść (Zazwyczaj strona generuje zawartość zwróconą bezpośrednio przez Test2, a następnie czeka 5 sekund, aby wyprowadzić treść zwróconą przez Test1, ponieważ js nie blokuje



Następnie bezpośrednio uzyskujemy dostęp do interfejsów Test1 i Test2, najpierw Test1, a następnie natychmiast Test2 i okazuje się, że Test2 musi czekać, aż Test1 wróci do zakończenia, jak pokazano na poniższym rysunku:



Jeśli żądanie strony ustawi blokadę czytnika, inne żądania przetwarzane jednocześnie w tej samej sesji nie będą mogły zaktualizować stanu sesji, ale przynajmniej będą mogły być odczytane. Jeśli strona żąda blokady zapisu w stanie sesji, wszystkie pozostałe strony są blokowane, niezależnie od tego, czy chcą czytać czy zapisywać treść. Na przykład, jeśli dwa widoki programu zapisują treść w tej samej sesji w tym samym czasie, jeden program musi poczekać, aż drugi program zakończy pracę, zanim będzie można ją napisać. W programowaniu AJAX ważne jest, aby być świadomym tego zjawiska.

Specjalna uwaga: Tylko podczas zapisu sesji Asp.net zablokuje żądanie, ale pod warunkiem, że odwiedziłeś stronę, na której sesja jest zapisywana, na przykład operację po zalogowaniu do systemu z sesją (sesja jest zablokowana do momentu wygaśnięcia, oczywiście tylko jeśli SessionID jest taki sam). Pojawi się ten problem.

Informacje o internacie

Dopóki strona korzysta z sesji, każde żądanie blokuje sesję przez cały jej okres istnienia, więc żądania o tym samym sessionid muszą czekać na odblokowanie

Oznacza to, że jeśli strona ma stronę z limitem czasu, nie może nic zrobić i trzeba czekać, aż strona z limitem czasu się załaduje.

Ty też tego nie możesz, wiele jednoczesnych żądań Ajaxu na jednej stronie, nie da się tego zrobić, żądania o zapytanie wiadomości są wysyłane.



Podsumowując:Jeśli przeprowadzisz sesję do żądania, jeśli nie przeprowadzisz sesji na żądanie, powyższa sytuacja się nie wydarzy

Rozwiązanie:

Dodano funkcję SessionState(System.Web.SessionState.SessionState.ReadOnly) do kontrolera kontrolera

Nuta:

Wymagane oznacza, że żądasz wyłącznego zablokowania sesji (czyli braku równoległego przetwarzania żądań dla tego samego identyfikatora sesji)
ReadOnly oznacza, że żądasz blokady niewyłącznej sesji (czyli twoje żądanie musi czekać na zakończenie żądań z wyłączną blokadą), ale możesz przetwarzać żądania z wyłącznymi blokadami zamki równoległe. Jednak to od ciebie zależy, by upewnić się, że twój kod nie będzie zapisywał się do Session. Nie jest to koniecznie egzekwowane przez ramy)
Wymagane oznacza mutex sesji, o który poprosiłeś, (czyli nie ma potrzeby przetwarzania tego samego SessionID równolegle)

ReadOnly oznacza, że sesja, o którą prosisz, jest blokadą niewyłączną (tzn. Twoje żądanie musi poczekać na zakończenie, żądanie wyłącznej blokady, ale możesz przetworzyć żądanie z równoległą blokadą niewyłączną). Ale chcesz mieć pewność, że kod nie pisze sesji. Nie musi być wykonywana przez framework)





Poprzedni:CEF: Osadzenie Chrome dla klienta
Następny:Błąd HTTP 503. Usługa jest niedostępna.
Opublikowano 06.07.2018 11:53:31 |
W przypadku WebForms dodaj po stronie na górze aspx (po prostu załaduj tę stronę blokującą):

EnableSessionState="Tylko do odczytu"
 Ziemianin| Opublikowano 14.07.2019 20:34:17 |
Większość programowania stron internetowych wykorzystuje sesje do zapisywania stanów sesji, ale użycie sesji w asp.net aplikacjach może znacząco wpłynąć na wydajność aplikacji webowych. Dlaczego i co na nią wpłynie, analizujemy poniżej

Wyjaśnienie MSDN dotyczące jednoczesnych żądań i sesji stwierdza:

Żądania współczesne i status sesji
Dostęp do stanu sesji ASP.NET jest przydzielony na sesję, co oznacza, że jeśli dwóch różnych użytkowników wyśle żądanie jednocześnie, dostęp do obu sesji jest przyznawany jednocześnie. Jednak jeśli oba jednoczesne żądania dotyczą tej samej sesji (używając tej samej wartości SessionID), pierwsze żądanie uzyska wyłączny dostęp do informacji sesji. Drugie żądanie zostanie wykonane dopiero po zakończeniu pierwszego żądania. (Jeśli wyłączna blokada informacji o sesji zostanie zwolniona, ponieważ pierwsze żądanie przekroczy limit blokady, dostęp zyskuje także druga sesja.) Jeśli ustawisz wartość EnableSessionState w dyrektywie @Page na ReadOnly, żądania informacji tylko do odczytu nie skutkują wyłącznym zablokowaniem danych sesji. Jednak żądania tylko do odczytu do danych sesji mogą nadal wymagać czekania na odblokowanie blokady z żądania odczytu/zapisu ustawionego przez dane sesji.
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com