Pregunta

Todos,

Así que tengo todas mis consultas seleccionadas en LINQ-to-SQL convertidas para usar CompiledQueries para acelerar las cosas. Funciona muy bien hasta ahora para las declaraciones seleccionadas, pero no he podido averiguar cómo precompilar las instrucciones de inserción, actualización o eliminación.

De acuerdo, cuando inserte, elimine o actualice en LINQ-to-SQL, debe usar el modelo de objetos. Pero, obviamente, en algún punto del camino genera una consulta, que sería bueno precompilar y almacenar en un miembro estático.

¿Es esto posible? ¿Cómo es el rendimiento de LINQ para actualizaciones, eliminaciones e inserciones cuando no está precompilado? Pude ver que es mucho más rápido que las selecciones, porque lo que hacen debajo es mucho más simple y menos & "; Dinámico &"; ...

¿Fue útil?

Solución

Hay una gran diferencia. Las consultas de selección de Linq a SQL pueden ser grandes árboles de expresiones complejas. Es esto lo que puede llevar algún tiempo 'compilar'. En este caso, se unen a algunos T-SQL que se pueden ejecutar en un servidor SQL. Por lo tanto, tiene sentido almacenar en caché el resultado de una operación para que pueda reutilizarse.

Sin embargo, otras eliminaciones, actualizaciones e inserciones son operaciones simples que no requieren que un árbol de expresión se convierta a T-SQL (LINQ en sí se trata de consultas). Es lamentable que hayamos sido entrenados para pensar en el código SQL que realiza estas otras operaciones como 'consultas', en realidad no estamos pidiendo ninguna información.

Estas operaciones solo están definidas por el DataContext no por LINQ, por lo tanto, el código para realizar estas funciones ya está compilado.

Otros consejos

Creo que las tres únicas inserciones tendrían sentido para poder compilar y reutilizar porque eliminar es trivialmente simple (BORRAR DE la tabla DONDE Clave ...) y ACTUALIZAR solo actualiza los campos que han cambiado y, por lo tanto, varía según operación de actualización.

[) amien

L2S usa " sp_executeSQL " así que después de ejecutarlo por primera vez, estará en la caché del plan de ejecución del procedimiento almacenado. Las ejecuciones posteriores (de la misma consulta, no los mismos parámetros) reutilizarán el plan compilado del caché. Entonces, lo que está pidiendo es manejado automáticamente por SQL Server 'detrás de escena'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top