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

Udsigt: 44050|Svar: 3

[Kilde] Entity Framework forespørgselsoptimering WITH(NOLOCK)

[Kopier link]
Opslået den 6-1-2021 14:52:16 | | | |
Først og fremmest, denne artikel ogIkke ved at tilføje WITH(NOLOCK) for at forbedre forespørgselsydelsenI stedet læses dataene gennem transaktionens isolationsmekanisme.

I SQL Server-databaser, når den samme databasetabel ofte læses og skrives samtidig, vil der opstå et låseproblem, det vil sige, at du ikke kan læse, før den forrige indsættelse, opdatering og sletning er gennemført, og du skal vente, til operationen er fuldført, før du kan udføre select-operationen for at forhindre samtidige operationer og læsning af beskidte data.

SELECT-sætningen med WITH (NOLOCK) for at løse blokeringsdeadlocken.

Seddel:Brug af WITH(NOLOCK) vil resultere i ukrypteret datalæsning

ef viser de genererede SQL-sætninger
https://www.itsvse.com/thread-3813-1-1.html
Testkoden er som følger:

Brug Func delegate til at pakke koden som følger:

Den resulterende SQL-sætning er som følger:

2021-01-06 14:32:09.9505 [ tråd] DEBUG DEBUG LogCenter - sql-sætning: 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-sætning:

2021-01-06 14:32:09.9525 [ tråd] DEBUG DEBUG LogCenter - sql-sætning: -- p__linq__0: 'itsvse.com' (type = streng, size = 4000)

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

2021-01-06 14:32:09.9545 [ tråd] DEBUG DEBUG LogCenter - sql-sætning: -- Færdiggjort på 1 ms med resultat: SqlDataReader

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

2021-01-06 14:32:09.9555 [ tråd] DEBUG DEBUG LogCenter - sql-sætning: Lukket forbindelse kl. 2021-01-06 14:32:09 +08:00
Select Query indeholder ikke Nolock-nøgleordet.

(Slut)





Tidligere:.NET/C# implementerer simpel logning baseret på BlockingCollection
Næste:.NET (CLS) offentlig sprogspecifikation
 Udlejer| Opslået den 6-1-2021 14:53:17 |
Brug: Tilføj følgende sætning til Application_Start() i Global.cs, og den genererede SQL vil automatisk tilføje with(nolock)
//ef命令拦截器
DbInterception.Add(ny WithNoLockInterceptor());
Hvis SQL-udsagnet skal låses, tilføj følgende udvidelse


1. Løste fejlproblemet med regulære udtryk leveret på internettet under særlige omstændigheder

 Udlejer| Opslået den 10-1-2021 10:27:32 |
Test af SQL-scripts:

Testresultater:

Ingen transaktion tilføjes som standard, og standardisolationsniveauet er korrekt:



Varighed: 17561 millisekunder

IsolationLevel.ReadUncommitted isolation level, som vist på følgende billede:



Tid: 519 ms

Kilde:



 Udlejer| Opslået den 2. februar 2023 kl. 11:45:35 |
ADO.NET indstillinger tillader beskidt læsningLæsUforpligtet, koden er som følger:


Der er en anden måde at skrive det på, dapper-koden er som følger:

Der er ingen problemer med begge at skrive prøver,Det anbefales at bruge den første direkte!!!


Andre måder at skrive på:



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