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

Utsikt: 44050|Svare: 3

[Kilde] Entity Framework Spørringsoptimalisering WITH(NOLOCK)

[Kopier lenke]
Publisert 6.01.2021 14:52:16 | | | |
Først og fremst, denne artikkelen ogIkke ved å legge til WITH(NOLOCK) for å forbedre spørringsytelsenI stedet leses dataene gjennom isolasjonsmekanismen i transaksjonen.

I SQL Server-databaser, når den samme databasetabellen ofte leses og skrives samtidig, vil det oppstå et låseproblem, det vil si at du ikke kan lese før forrige innsetting, oppdatering og sletting er fullført, og du må vente til operasjonen er fullført før du kan utføre select-operasjonen, for å forhindre samtidige operasjoner og lese skitne data.

SELECT-setningen med WITH (NOLOCK) for å løse blokkeringsdeadlocken.

Notat:Bruk av WITH(NOLOCK) vil resultere i skitten datalesing

ef viser de genererte SQL-setningene
https://www.itsvse.com/thread-3813-1-1.html
Testkoden er som følger:

Bruk Func delegate for å pakke koden som følger:

Den resulterende SQL-setningen er som følger:

2021-01-06 14:32:09.9505 [ tråd] DEBUG DEBUG LogCenter - sql-setning: SELECT TOP (1)
    [Omfang1]. [ID] SOM [ID],
    [Omfang1]. [Navn] AS [Navn]
    FRA [dbo]. [Itsvse] AS [Extent1]
    HVOR ([Extent1].[ Navn] = @p__linq__0) ELLER (([Omfang1].[ Navn] ER NULL) OG (@p__linq__0 ER NULL))
2021-01-06 14:32:09.9515 [ tråd] DEBUG DEBUG LogCenter - sql-setning:

2021-01-06 14:32:09.9525 [ tråd] DEBUG DEBUG LogCenter - sql-setning: -- p__linq__0: 'itsvse.com' (type = streng, størrelse = 4000)

2021-01-06 14:32:09.9525 [ tråd] DEBUG DEBUG LogCenter - sql-setning: -- Kjører kl. 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ tråd] DEBUG DEBUG LogCenter - sql-setning: -- Fullført på 1 ms med resultat: SqlDataReader

2021-01-06 14:32:09.9555 [ tråd] DEBUG DEBUG LogCenter - sql-setning:

2021-01-06 14:32:09.9555 [ tråd] DEBUG DEBUG LogCenter - sql-setning: Lukket tilkobling kl. 2021-01-06 14:32:09 +08:00
Select Query inkluderer ikke nolock-nøkkelordet.

(Slutt)





Foregående:.NET/C# implementerer enkel logging basert på BlockingCollection
Neste:.NET (CLS) offentlig språkspesifikasjon
 Vert| Publisert 6.01.2021 kl. 14:53:17 |
Bruk: Legg til følgende setning i Application_Start() i Global.cs, og den genererte SQL-en vil automatisk legge til med(nolock)
//ef命令拦截器
DbInterception.Add(ny WithNoLockInterceptor());
Hvis SQL-setningen må låses, legg til følgende utvidelse


1. Løste feilproblemet med regulære uttrykk som tilbys på Internett under spesielle omstendigheter

 Vert| Publisert 10.01.2021 10:27:32 |
Testing av SQL-skript:

Testresultater:

Ingen transaksjon legges til som standard, og standard isolasjonsnivå er korrekt:



Varighet: 17561 millisekunder

IsolationLevel.ReadUncommitted isolasjonsnivå, som vist i følgende bilde:



Tid: 519 ms

Kilde:



 Vert| Publisert 2023-5-2 11:45:35 |
ADO.NET innstillinger tillater skitten lesingLesUforpliktet, koden er som følger:


Det finnes en annen måte å skrive det på, dapper-koden er som følger:

Det er ingen problemer med begge å skrive prøver,Det anbefales å bruke den første direkte!!!


Andre måter å skrive på:



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