Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 44050|Respuesta: 3

[Fuente] Optimización de consultas del Entity Framework WITH(NOLOCK)

[Copiar enlace]
Publicado el 6-1-2021 14:52:16 | | | |
En primer lugar, este artículo yNo añadiendo WITH(NOLOCK) para mejorar el rendimiento de las consultasEn su lugar, los datos se leen a través del mecanismo de aislamiento de la transacción.

En las bases de datos SQL Server, cuando la misma tabla de base de datos se lee y escribe frecuentemente al mismo tiempo, habrá un problema de bloqueo, es decir, no se puede leer hasta que se complete la transacción anterior de insertar, actualizar y eliminar, y debe esperar a que se complete la operación para poder realizar la operación de selección, con el fin de evitar operaciones concurrentes y leer datos sucios.

SELECT con WITH (NOLOCK) para resolver el bloqueo bloqueante.

Nota:Usar WITH(NOLOCK) resultará en lecturas de datos corruptas

ef muestra las sentencias SQL generadas
https://www.itsvse.com/thread-3813-1-1.html
El código de prueba es el siguiente:

Utiliza Func delegate para empaquetar el código de la siguiente manera:

La sentencia SQL resultante es la siguiente:

2021-01-06 14:32:09.9505 [ hilo] DEBUG DEBUG LogCenter - declaración sql: SELECT TOP (1)
    [Extensión1]. [ID] COMO [ID],
    [Extensión1]. [Nombre] AS [Nombre]
    DE [dbo]. [Itsvse] COMO [Extensión1]
    DONDE ([Extensión1].[ Nombre] = @p__linq__0) O (([Extensión1].[ Name] ES NULO) Y (@p__linq__0 ES NULO))
2021-01-06 14:32:09.9515 [ hilo] DEBUG DEBUG LogCenter - declaración sql:

06-01-2021 14:32:09.9525 [ hilo] DEBUG DEBUG LogCenter - sentencia sql: -- p__linq__0: 'itsvse.com' (tipo = cadena, tamaño = 4000)

2021-01-06 14:32:09.9525 [ hilo] DEBUG DEBUG LogCenter - sentencia sql: -- Ejecutándose a las 2021-01-06 14:32:09 +08:00

2021-01-06 14:32:09.9545 [ hilo] DEBUG DEBUG LogCenter - declaración sql: -- Completado en 1 ms con resultado: SqlDataReader

2021-01-06 14:32:09.9555 [ hilo] DEBUG DEBUG LogCenter - declaración sql:

2021-01-06 14:32:09.9555 [ hilo] DEBUG DEBUG LogCenter - declaración sql: Conexión cerrada a las 2021-01-06 14:32:09 +08:00
Consulta select no incluye la palabra clave nolock.

(Fin)





Anterior:.NET/C# implementa un registro sencillo basado en BlockingCollection
Próximo:Especificación del lenguaje público .NET (CLS)
 Propietario| Publicado el 6-1-2021 14:53:17 |
Usar: Añadir la siguiente sentencia a la Application_Start() del Global.cs, y el SQL generado añadirá automáticamente with(nolock)
//ef命令拦截器
DbInterception.Add (nuevo WithNoLockInterceptor());
Si la sentencia SQL necesita ser bloqueada, añade la siguiente extensión


1. Solucionó el problema de error de las expresiones regulares proporcionadas en Internet bajo circunstancias especiales

 Propietario| Publicado el 10-1-2021 10:27:32 |
Pruebas de scripts SQL:

Resultados de las pruebas:

No se añade ninguna transacción por defecto, y el nivel de aislamiento por defecto es correcto:



Duración: 17561 milisegundos

IsolationLevel.ReadUncommitted isolation level, como se muestra en la siguiente imagen:



Tiempo: 519 ms

Fuente:



 Propietario| Publicado el 2023-5-2 11:45:35 |
ADO.NET ajustes permiten lectura suciaLeerUncommitted, el código es el siguiente:


Hay otra forma de escribirlo, el código elegante es el siguiente:

No hay problemas con ambos exámenes de escritura,Se recomienda usar directamente el primero!!!


Otras formas de escribir:



Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com