Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 44050|Yanıt: 3

[Kaynak] Entity Framework Sorgu Optimizasyonu WITH(NOLOCK)

[Bağlantıyı kopyala]
2021-1-6 tarihinde 14:52:16 tarihinde yayınlandı | | | |
Öncelikle, bu makale veSorgu performansını artırmak için WITH(NOLOCK) ekleyerek değilBunun yerine, veriler işlemin izolasyon mekanizmasından okunur.

SQL Server veritabanlarında, aynı veritabanı tablosu sık sık aynı anda okunup yazıldığında, bir kilit sorunu ortaya çıkar; yani önceki ekleme, güncelleme ve silme işlemi tamamlanana kadar okuyamazsınız ve eşzamanlı işlemleri önlemek ve kirli veri okumayı önlemek için select işlemini gerçekleştirebilmek için işlem tamamlanana kadar beklemeniz gerekir.

SELECT ifadesi, WITH (NOLOCK) ile bloklama çıkmazını çözebilir.

Not:WITH(NOLOCK) kullanmak kirli veri okumasına yol açar

ef, oluşturulan SQL ifadelerini gösterir
https://www.itsvse.com/thread-3813-1-1.html
Test kodu şu şekildedir:

Kodu aşağıdaki şekilde paketlemek için Func delegate kullanın:

Ortaya çıkan SQL ifadesi şöyledir:

2021-01-06 14:32:09.9505 [ konu] DEBUG DEBUG LogCenter - sql ifadesi: SELECT TOP (1)
    [Kapsam1]. [ID] AS [ID],
    [Kapsam1]. [İsim] AS [İsim]
    [dbo]'dan. [Itsvse] AS [Kapsam1]
    BURADA ([Kapsam1].[ İsim] = @p__linq__0) VEYA (([Kapsam1].[ isim] NULL'DUR) VE (@p__linq__0 NULL'DIR))
2021-01-06 14:32:09.9515 [ konu] DEBUG DEBUG LogCenter - sql ifadesi:

2021-01-06 14:32:09.9525 [ konu] DEBUG DEBUG LogCenter - sql ifadesi: -- p__linq__0: 'itsvse.com' (tür = dize, boyut = 4000)

2021-01-06 14:32:09.9525 [ konu] DEBUG DEBUG LogCenter - sql ifadesi: -- Yürütülüyor: 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ konu] DEBUG DEBUG LogCenter - sql ifadesi: -- 1 ms'de tamamlandı ve sonuç: SqlDataReader

2021-01-06 14:32:09.9555 [ konu] DEBUG DEBUG LogCenter - sql ifadesi:

2021-01-06 14:32:09.9555 [ konu] DEBUG DEBUG LogCenter - sql statement: Bağlanmış bağlantı 2021-01-06 14:32:09 +08:00
Select Query, NoLOCK anahtar kelimesini içermez.

(Son)





Önceki:.NET/C#, BlockingCollection tabanlı basit logları uygular
Önümüzdeki:.NET (CLS) kamu dili spesifikasyonu
 Ev sahibi| 2021-1-6 tarihinde 14:53:17 tarihinde yayınlandı |
Kullan: Global.cs'nin Application_Start() ifadesine aşağıdaki ifadeyi ekleyin, oluşturulan SQL otomatik olarak (nolock) ile ekler
//ef命令拦截器
DbInterception.Add(yeni WithNoLockInterceptor());
SQL ifadesinin kilitlenmesi gerekiyorsa, aşağıdaki uzantıyı ekleyin


1. Özel koşullar altında internette sunulan düzenli ifadelerin hata problemi çözüldü

 Ev sahibi| 2021-1-10 tarihinde 10:27:32 tarihinde yayınlandı |
SQL scriptlerini test etmek:

Test sonuçları:

Varsayılan olarak işlem eklenmez ve varsayılan izolasyon seviyesi doğrudur:



Süre: 17561 milisaniye

IsolationLevel.ReadUncommitted isolation level, aşağıdaki görselde gösterildiği gibi:



Süre: 519 ms

Kaynak:



 Ev sahibi| 2023-5-2 tarihinde 11:45:35 tarihinde yayınlandı |
ADO.NET ayarları kirli okumaya izin verirReadUncommitted, kod şöyledir:


Başka bir şekilde yazılabilir, dapper kodu şöyledir:

Her iki yazım testinde de sorun yok,İlkini doğrudan kullanmanız önerilir!!!


Yazmanın diğer yolları:



Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com