Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 29669|Svare: 3

[ASP.NET] ASP.NET flere forespørsler på siden samtidig, oppstår det en blokkeringssituasjon med suspendert animasjon

[Kopier lenke]
Publisert på 22.09.2017 17:32:59 | | | |
Nylig, da jeg jobbet med et prosjekt, måtte noen sider laste inn mye data, og noen ganger klikket jeg på siden uten å vente på at siden skulle bli ferdig med å laste, og så klikket jeg på en annen side igjen

Det vil være en veldig langsom tilstand av suspendert animasjon under lasting av nettsiden, så la oss studere det nøye i dag.

Først trodde jeg at denne situasjonen ville oppstå på mange nettsteder eller et problem med datanettverkets hastighet, men jeg oppdaget at denne siden ikke hadde denne situasjonen, noen ganger satt jeg fast når jeg postet, men jeg klikket på andre sider i fanen for å laste raskt.

La oss ta en nærmere titt i dag!! Koden testet først:

Homeview-kode:

Kontrollerkode:



For testkodeanalyse har kontrolleren vår tre metoder, én er startsiden, og de to andre er testmetoder

Test1-forespørselsblokker i 5 sekunder og returnerer deretter data til brukeren

Test2-forespørsler blokkerer ikke og returnerer data direkte til brukeren

Vår hjemmeside har to grensesnitt for Ajax-forespørsler, som er asynkrone forespørsler, så det er ingen blokkeringsproblemer.

Vi vil finne at Test1-metoden bare gir innhold etter at Test2 har levert innhold (Normalt vil siden sende ut innholdet som returneres av Test2 direkte, og deretter vente 5 sekunder før innholdet returnert av Test1, fordi js ikke blokkerer



Deretter får vi direkte tilgang til Test1- og Test2-grensesnittene, først til Test1, og deretter umiddelbart til Test2, og finner ut at Test2 må vente til Test1 er tilbake for å fullføre, som vist i figuren under:



Hvis en sideforespørsel setter en leserlås, vil andre forespørsler som behandles samtidig i samme økt ikke kunne oppdatere sesjonstilstanden, men de kan i det minste leses. Hvis en side ber om en skrivelås for sesjonstilstanden, blokkeres alle andre sider, uavhengig av om de vil lese eller skrive innhold. For eksempel, hvis to programvisninger skriver innhold i samme økt samtidig, må ett program vente til det andre programmet er ferdig før det kan skrives. I AJAX-programmering er det viktig å være oppmerksom på at dette skjer.

Spesiell merknad: Kun når du skriver en sesjon, vil Asp.net blokkere forespørselen, men så lenge du har besøkt siden der sesjonen er skrevet, for eksempel operasjonen etter at du logget inn i systemet med sesjonen (sesjonen er låst til den utløper, selvfølgelig, det er bare slik at SessionID-en er den samme). Det vil oppstå dette problemet.

Informasjon om nettbrukere

Så lenge nettstedet bruker en økt, vil hver forespørsel låse sesjonen gjennom hele dens levetid, slik at forespørsler med samme sessionid må vente på å låses opp

Dette betyr at hvis nettsiden har en tidsbegrenset side, kan den ikke gjøre noe, og du må vente på at den tidsbegrensede siden skal lastes.

Du kan heller ikke gjøre det, flere samtidige ajax-forespørsler på samme side, du kan ikke gjøre det, meldingspolling-forespørsler.



For å oppsummere:Hvis du tar en økt til forespørselen, hvis du ikke bringer en sesjon til forespørselen, vil ikke den ovennevnte situasjonen inntreffe

Løsning:

Lagt til funksjonen SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) i kontrollerkontrolleren

Notat:

Required betyr at du ber om en eksklusiv lås på Session (dvs. ingen parallell behandling av forespørsler for samme sessionID)
ReadOnly betyr at du ber om en ikke-eksklusiv lås på Session (dvs. forespørselen din må fortsatt vente på forespørsler med eksklusiv lås for å fullføres, men du kan behandle forespørsler med ikke-eksklusive låser parallelt. Men det er opp til deg å sørge for at koden din ikke skrives til Session. Det håndheves ikke nødvendigvis av rammeverket)
Påkrevd betyr session-mutexen du ba om (dvs. det er ikke noe krav om å behandle samme SessionID parallelt)

ReadOnly betyr at sesjonen du ber om er en ikke-eksklusiv lås (dvs. forespørselen din må fortsatt vente på fullføring, forespørselen om en eksklusiv lås, men du kan behandle en forespørsel med en parallell ikke-eksklusiv lås). Men du vil være sikker på at koden din ikke skriver økter. Det trenger ikke å utføres av rammeverket)





Foregående:CEF: Embed en Chrome for klienten
Neste:HTTP-feil 503. Tjenesten er ikke tilgjengelig.
Publisert på 06.07.2018 11:53:31 |
For WebForms, legg til etter siden øverst på aspx (bare last inn den blokkerende siden):

EnableSessionState="ReadOnly"
 Vert| Publisert på 14.07.2019 20:34:17 |
De fleste webutviklinger bruker sesjoner for å lagre sesjonstilstander, men bruk av sesjoner i asp.net applikasjoner kan ha betydelig innvirkning på ytelsen til webapplikasjoner. Hvorfor og hva som vil påvirke det, analyseres nedenfor

MSDN-forklaring av samtidige forespørsler og økter lyder:

Samtidige forespørsler og sesjonsstatus
Tilgang til ASP.NET-sesjonstilstanden skjer per økt, noe som betyr at hvis to forskjellige brukere sender en forespørsel samtidig, gis tilgang til hver enkelt sesjon samtidig. Men hvis de to samtidige forespørslene gjelder for samme økt (ved å bruke samme SessionID-verdi), vil den første forespørselen få eksklusiv tilgang til sesjonsinformasjonen. Den andre forespørselen vil kun bli utført etter at den første forespørselen er fullført. (Hvis den eksklusive låsen på sesjonsinformasjonen frigjøres fordi den første forespørselen overstiger låsetiden, får også den andre økten tilgang.) Hvis du setter EnableSessionState-verdien i @Page-direktivet til ReadOnly, resulterer ikke forespørsler om skrivebeskyttet sesjonsinformasjon til en eksklusiv lås på sesjonsdataene. Imidlertid kan skrivebeskyttede forespørsler til sesjonsdata fortsatt måtte vente til låsen er låst opp fra lese-/skriveforespørselen satt av sesjonsdataene.
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com