Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 44050|Válasz: 3

[Forrás] Entity Framework lekérdezés optimalizálása WITH(NOLOCK)

[Linket másol]
Közzétéve: 2021-1-6 14:52:16 | | | |
Először is, ez a cikk ésNem azzal, hogy hozzáadjuk a WITH(NOLOCK) lekérdezések teljesítményét javítvaEhelyett az adatokat a tranzakció izolációs mechanizmusán keresztül olvassák fel.

SQL Server adatbázisokban, amikor ugyanazt az adatbázis-táblát gyakran egyszerre olvassák és írják, zárolási probléma adódik, vagyis nem lehet olvasni, amíg az előző beillesztés, frissítés és törlés tranzakció be nem fejeződött, és várni kell a művelet befejezésére, mielőtt végrehajthatod a kiválasztó műveletet, hogy elkerüld az egyidejű műveleteket és a piszkos adatokat olvassák.

SELECT utasítás WITH (NOLOCK) jelzéssel a blokkolási holtpont megoldásához.

Jegyzet:A WITH(NOLOCK) használata piszkos adatolvasást eredményez

ef megjeleníti a generált SQL utasításokat
https://www.itsvse.com/thread-3813-1-1.html
A tesztkód a következő:

Használd a Func delegate-t a kód csomagolásához az alábbiakban:

Az eredmény SQL állítása a következő:

2021-01-06 14:32:09.9505 [ téma] HIBAKERESÉS LogCenter - sql utasítás: SELECT TOP (1)
    [Mérték1]. [ID] MINT [ID],
    [Mérték1]. [Név] AS [Név]
    FROM [dbo]. [Itsvse] AS [Kiterjedtség1]
    AHOL ([Extent1].[ Név] = @p__linq__0) VAGY (([Extent1].[ Név] NULLA) ÉS (@p__linq__0 NULLA))
2021-01-06 14:32:09.9515 [ téma DEBUG DEBUG LogCenter - sql nyilatkozat:

2021-01-06 14:32:09.9525 [ téma] DEBUG DEBUG LogCenter - sql utasítás: -- p__linq__0: 'itsvse.com' (type = string, size = 4000)

2021-01-06 14:32:09.9525 [ téma] DEBUG DEBUG LogCenter - sql nyilatkozat: -- Futtatás: 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ téma] DEBUG DEBUG LogCenter - sql állítás: -- 1 ms alatt kész, eredmény: SqlDataReader

2021-01-06 14:32:09.9555 [ téma] HIBAKERESÉS LogCenter - sql nyilatkozat:

2021-01-06 14:32:09.9555 [ téma] HIBAKERESÉS LogCenter - sql nyilatkozat: Zárt kapcsolat 2021-01-06 14:32:09 +08:00
A Select lekérdezés nem tartalmazza a nolock kulcsszót.

(Vége)





Előző:A .NET/C# egyszerű naplózást valósít meg a BlockingCollection alapú
Következő:.NET (CLS) köznyelvi specifikáció
 Háziúr| Közzétéve: 2021-1-6 14:53:17 |
Használat: Add hozzá a következő utasítást a Global.cs Application_Start() nevéhez, és a generált SQL automatikusan hozzáad (nolock)-hoz
//ef命令拦截器
DbInterception.Add(új WithNoLockInterceptor());
Ha az SQL utasítást le kell zárni, adjuk hozzá a következő kiterjesztést


1. Javították az interneten speciális körülmények között elérhető reguláris kifejezések hibaproblémáját

 Háziúr| Közzétéve: 2021-1-10 10:27:32 |
SQL szkriptek tesztelése:

Teszteredmények:

Alapértelmezés szerint nem adnak hozzá tranzakciót, és az alapértelmezett izolációs szint helyes:



Időtartam: 17561 milliszekundum

IsolationLevel.ReadUncommitted isolation level, ahogy az alábbi képen látható:



Idő: 519 ms

Forrás:



 Háziúr| Közzétéve 2023-5-2 11:45:35-ön |
ADO.NET beállítások lehetővé teszik a piszkos olvasástReadUncommitted, a kód a következő:


Van egy másik módja is, hogy írjuk, a dapper kód a következő:

Mindkét írási tesztnél nincs probléma,Ajánlott közvetlenül az elsőt használni!!!


Más írásmódok:



Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com