Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 44050|Svar: 3

[Källa] Entity Framework Frågeoptimering WITH(NOLOCK)

[Kopiera länk]
Publicerad den 6 januari 2021 14:52:16 | | | |
Först och främst, denna artikel ochInte genom att lägga till WITH(NOLOCK) för att förbättra frågeprestandanIstället läses datan genom transaktionens isoleringsmekanism.

I SQL Server-databaser, när samma databastabell ofta läses och skrivs samtidigt, uppstår ett låsningsproblem, det vill säga att du inte kan läsa förrän föregående insättning, uppdatering och borttagning är slutförd, och du måste vänta tills operationen är klar innan du kan utföra select-operationen, för att förhindra samtidiga operationer och läsa smutsiga data.

SELECT-satsen med WITH (NOLOCK) för att lösa blockeringsdeadlocken.

Not:Att använda WITH(NOLOCK) resulterar i smutsig dataläsning

ef visar de genererade SQL-satserna
https://www.itsvse.com/thread-3813-1-1.html
Testkoden är följande:

Använd Func delegate för att paketera koden enligt följande:

Den resulterande SQL-satsen är följande:

2021-01-06 14:32:09.9505 [ tråd] DEBUG DEBUG LogCenter - sql-sats: SELECT TOP (1)
    [Extent1]. [ID] SOM [ID],
    [Extent1]. [Namn] AS [Namn]
    FRÅN [dbo]. [Itsvse] AS [Extent1]
    DÄR ([Extent1].[ Namn] = @p__linq__0) ELLER (([Extent1].[ Namn] ÄR NULL) OCH (@p__linq__0 ÄR NULL))
2021-01-06 14:32:09.9515 [ tråd] DEBUG DEBUG LogCenter - sql-sats:

2021-01-06 14:32:09.9525 [ tråd] DEBUG DEBUG LogCenter - sql-sats: -- p__linq__0: 'itsvse.com' (typ = sträng, storlek = 4000)

2021-01-06 14:32:09.9525 [ tråd] DEBUG DEBUG LogCenter - sql-sats: -- Körs 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ tråd] DEBUG DEBUG LogCenter - sql-sats: -- Slutförd på 1 ms med resultat: SqlDataReader

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

2021-01-06 14:32:09.9555 [ tråd] DEBUG DEBUG LogCenter - sql-sats: Stängd anslutning kl. 2021-01-06 14:32:09 +08:00
SELECT-fråga inkluderar inte Nolock-nyckelordet.

(Slut)





Föregående:.NET/C# implementerar enkel loggning baserad på BlockingCollection
Nästa:.NET (CLS) public-språkspecifikation
 Hyresvärd| Publicerad den 6-1-2021 14:53:17 |
Användning: Lägg till följande sats i Application_Start() i Global.cs, och den genererade SQL:n kommer automatiskt att lägga till with(nolock)
//ef命令拦截器
DbInterception.Add(ny WithNoLockInterceptor());
Om SQL-satsen behöver låsas, lägg till följande tillägg


1. Löste felproblemet med reguljära uttryck som tillhandahålls på Internet under särskilda omständigheter

 Hyresvärd| Publicerad den 2021-1-10 10:27:32 |
Testning av SQL-skript:

Testresultat:

Ingen transaktion läggs till som standard, och standardnivån för isolering är korrekt:



Varaktighet: 17 561 millisekunder

IsolationLevel.ReadUncommitted isolation level, som visas i följande bild:



Tid: 519 ms

Källa:



 Hyresvärd| Publicerad den 2023-5-2 11:45:35 |
ADO.NET inställningar tillåter smutsig läsningLäs Oengagerad, koden är följande:


Det finns ett annat sätt att skriva det, dapper-koden är följande:

Det finns inga problem med att skriva prov,Det rekommenderas att använda den första direkt!!!


Andra sätt att skriva:



Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com