Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 29669|Svar: 3

[ASP.NET] ASP.NET flere forespørgsler på siden på samme tid, opstår der en blokerings-suspenderet animation

[Kopier link]
Opslået på 22/09/2017 17.32.59 | | | |
For nylig, da jeg arbejdede på et projekt, skulle nogle sider indlæse en masse data, og nogle gange klikkede jeg på siden uden at vente på, at siden var færdig med at indlæse, og så klikkede jeg på en anden side igen

Der vil være en meget langsom tilstand af suspenderet animation, mens websiden indlæses, så lad os studere det grundigt i dag.

Først troede jeg, at denne situation ville opstå på mange hjemmesider eller på mit computernetværks hastighedsproblem, men jeg fandt ud af, at denne side ikke havde denne situation; nogle gange sad jeg fast, når jeg postede, men jeg klikkede på andre sider i fanen for at indlæse hurtigt.

Lad os tage et nærmere kig i dag!! Koden testede først:

Homeview-kode:

Controller-kode:



Til testkodeanalyse har vores controller 3 metoder, én er startsiden, og de to andre er testmetoder

Test1-anmodningen blokerer i 5 sekunder og returnerer derefter data til brugeren

Test2-forespørgsler blokerer ikke og returnerer data direkte til brugeren

Vores hjemmeside har to grænseflader til Ajax-forespørgsler, som er asynkrone forespørgsler, så der ikke er noget blokeringsproblem.

Vi vil opdage, at Test1-metoden kun outputter indhold, efter Test2 outputter indhold (Normalt vil siden direkte outputte det indhold, Test2 returnerede, og derefter vente 5 sekunder med at outputte det indhold, Test1 returnerede, fordi js ikke blokerer



Derefter går vi direkte til Test1- og Test2-grænsefladerne, vi tilgår først Test1, og derefter straks Test2, og finder ud af, at Test2 skal vente, indtil Test1 er tilbage for at fuldføre, som vist i figuren nedenfor:



Hvis en sideanmodning sætter en læserlås, vil andre forespørgsler, der behandles samtidig i samme session, ikke kunne opdatere sessionens tilstand, men de kan i det mindste læses. Hvis en side anmoder om en skrivelås for sessionstilstanden, blokeres alle andre sider, uanset om de ønsker at læse eller skrive indhold. For eksempel, hvis to programvisninger skriver indhold i samme session på samme tid, skal det ene program vente, til det andet program er færdigt, før det kan skrives. I AJAX-programmering er det vigtigt at være opmærksom på, at dette sker.

Særlig note: Kun når du skriver en session, vil Asp.net blokere anmodningen, men så længe du har besøgt siden, hvor sessionen er skrevet, såsom operationen efter at have logget ind i systemet med sessionen (sessionen er låst, indtil den udløber, det er kun tilfældet, at SessionID'et er det samme). Der vil være dette problem.

Netizen-information

Så længe hjemmesiden bruger en session, vil hver anmodning låse sessionen gennem hele dens levetid, så anmodninger med samme sessionid skal vente på at blive låst op

Det betyder, at hvis hjemmesiden har en side med tidsbegrænset tid, kan den ikke gøre noget, og du skal vente på, at den tidsbegrænsede side indlæses.

Du kan heller ikke gøre det, flere ajax-samtidige forespørgsler på samme side, du kan ikke gøre det, beskedafstemningsanmodninger.



For at opsummere det:Hvis du tager en session til anmodningen, hvis du ikke bringer en session til anmodningen, vil ovenstående situation ikke opstå

Opløsning:

Tilføjede SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)-funktionen til controllercontrolleren

Seddel:

Required betyder, at du anmoder om en eksklusiv lås på Session (dvs. ingen parallel behandling af anmodninger om samme sessionID)
ReadOnly betyder, at du anmoder om en ikke-eksklusiv lås på Session (dvs. din anmodning skal stadig vente på, at anmodninger med eksklusiv lås bliver færdige, men du kan behandle anmodninger med ikke-eksklusive låse parallelt. Det er dog op til dig at sikre, at din kode ikke skriver til Session. Det håndhæves ikke nødvendigvis af rammen)
Påkrævet betyder den sessionsmutex, du har anmodet om (dvs. der er ikke krav om at behandle det samme SessionID parallelt)

ReadOnly betyder, at den session, du anmoder om, er en ikke-eksklusiv lås (dvs. din anmodning skal stadig vente på fuldførelse, anmodningen om en eksklusiv lås, men du kan behandle en anmodning med en parallel ikke-eksklusiv lås). Men du skal sikre dig, at din kode ikke skriver sessioner. Det behøver ikke at blive udført af frameworket)





Tidligere:CEF: Indlejr en Chrome til klienten
Næste:HTTP-fejl 503. Tjenesten er ikke tilgængelig.
Opslået på 06/07/2018 11.53.31 |
For WebForms, tilføj efter siden øverst på aspx (indlæs bare den blokeringsside):

EnableSessionState="ReadOnly"
 Udlejer| Opslået på 14/07/2019 20.34.17 |
De fleste webudviklinger bruger sessioner til at gemme sessionstilstande, men brugen af sessioner i asp.net applikationer kan have en betydelig indvirkning på ydeevnen af webapplikationer. Hvorfor og hvad der vil påvirke det, analyseres nedenfor

MSDN's forklaring af samtidige anmodninger og sessioner lyder:

Samtidige forespørgsler og sessionsstatus
Adgang til ASP.NET sessionstilstand sker pr. session, hvilket betyder, at hvis to forskellige brugere sender en anmodning samtidig, gives adgang til hver enkelt session samtidig. Hvis de to samtidige anmodninger dog gælder for samme session (ved at bruge samme SessionID-værdi), vil den første anmodning få eksklusiv adgang til sessionsinformationen. Den anden anmodning vil kun blive udført, efter den første anmodning er fuldført. (Hvis den eksklusive lås på sessionsinformationen frigives, fordi den første anmodning overstiger låsetiden, får den anden session også adgang.) Hvis du sætter EnableSessionState-værdien i @Page-direktivet til ReadOnly, resulterer anmodninger om læsebeskyttet sessionsinformation ikke i en eksklusiv lås på sessionsdataene. Dog kan skrivebeskyttede anmodninger om sessionsdata stadig skulle vente, indtil låsen er låst op fra læse-/skriveanmodningen, som sessionsdataene har sat.
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com