Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 44050|Răspunde: 3

[Sursă] Optimizarea interogărilor Entity Framework WITH(NOLOCK)

[Copiază linkul]
Postat la 2021-1-6 14:52:16 | | | |
În primul rând, acest articol șiNu prin adăugarea WITH(NOLOCK) pentru a îmbunătăți performanța interogărilorÎn schimb, datele sunt citite prin mecanismul de izolare al tranzacției.

În bazele de date SQL Server, când același tabel de bază de date este frecvent citit și scris simultan, va apărea o problemă de blocare, adică nu poți citi până când tranzacția anterioară de inserare, actualizare și ștergere nu este finalizată și trebuie să aștepți până când operația este finalizată înainte de a putea efectua operația de selecție, pentru a preveni operațiile concurente și a citi date murdare.

instrucțiunea SELECT cu WITH (NOLOCK) pentru a rezolva blocajul blocant.

Notă:Folosirea WITH(NOLOCK) va duce la citirea datelor murdare

ef afișează instrucțiunile SQL generate
https://www.itsvse.com/thread-3813-1-1.html
Codul testului este următorul:

Folosiți delegatul Func pentru a împacheta codul astfel:

Instrucțiunea SQL rezultată este următoarea:

2021-01-06 14:32:09.9505 [ thread] DEBUG DEBUG LogCenter - instrucțiune sql: SELECT TOP (1)
    [Extinderea 1]. [ID] CA [ID],
    [Extinderea 1]. [Nume] AS [Nume]
    DE la [dbo]. [Itsvse] CA [Extinderea 1]
    UNDE ([Extinderea 1].[ Nume] = @p__linq__0) SAU (([Extinderea 1].[ Nume] ESTE NUL) ȘI (@p__linq__0 ESTE NUL))
2021-01-06 14:32:09.9515 [ thread] DEBUG DEBUG LogCenter - declarație sql:

2021-01-06 14:32:09.9525 [ thread] DEBUG DEBUG LogCenter - instrucțiune sql: -- p__linq__0: 'itsvse.com' (tip = șir, dimensiune = 4000)

2021-01-06 14:32:09.9525 [ thread] DEBUG DEBUG LogCenter - instrucțiune sql: -- Executare la 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ thread] DEBUG DEBUG LogCenter - instrucțiune sql: -- Finalizat în 1 ms cu rezultatul: SqlDataReader

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - declarație sql:

2021-01-06 14:32:09.9555 [ thread] DEBUG DEBUG LogCenter - instrucțiune sql: Conexiune închisă la 2021-01-06 14:32:09 +08:00
Interogarea Select nu include cuvântul-cheie Nolock.

(Sfârșit)





Precedent:.NET/C# implementează logare simplă bazată pe BlockingCollection
Următor:Specificația limbajului public .NET (CLS)
 Proprietarul| Postat la 2021-1-6 14:53:17 |
Utilizare: Adaugă următoarea instrucțiune la Application_Start() din Global.cs, iar SQL-ul generat va adăuga automat with(nolock)
//ef命令拦截器
DbInterception.Add (noul WithNoLockInterceptor());
Dacă instrucțiunea SQL trebuie blocată, adaugă următoarea extensie


1. Rezolvarea problemei erorilor expresiilor regulate oferite pe Internet în circumstanțe speciale

 Proprietarul| Postat la 2021-1-10 10:27:32 |
Testarea scripturilor SQL:

Rezultatele testelor:

Nu se adaugă nicio tranzacție implicit, iar nivelul implicit de izolare este corect:



Durată: 17561 milisecunde

Nivelul de izolare IsolationLevel.ReadUncommitted, așa cum este arătat în imaginea următoare:



Timp: 519 ms

Sursă:



 Proprietarul| Postat la 2023-5-2 11:45:35 |
Setările ADO.NET permit citirea murdarăReadUncommitted, codul este următorul:


Există o altă modalitate de a-l scrie, codul dapper este următorul:

Nu există probleme cu ambele teste de scriere,Se recomandă să folosești direct primul!!!


Alte moduri de a scrie:



Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com