visual studio net microsoft introduccion ejemplo datos conexion sql-server database linq-to-sql

sql-server - studio - conexion a base de datos ado net c#



¿Proporciona LINQ To SQL tiempos de respuesta más rápidos que el uso de ado.net y oledb? (7)

LINQ simplifica la programación de bases de datos sin duda, pero ¿tiene un inconveniente? Inline SQL requiere uno para comunicarse con la base de datos de una cierta manera que abre la base de datos a las inyecciones. El SQL en línea también debe verificarse con sintaxis, tener un plan creado y luego ejecutarse, lo que requiere ciclos preciosos. Los procedimientos almacenados también han sido un estándar sólido en la gran programación de aplicaciones de bases de datos. Muchos programadores que conozco usan una capa de datos que simplifica el desarrollo, sin embargo, no en la medida en que lo hace LINQ. ¿Es hora de renunciar a los SP e ir a LINQ?


Depende de lo que estés haciendo. LINQ será menos eficiente en la manipulación real de datos / conjuntos que una base de datos real. Pero ahorrará mucho al no tener que conectarse a la base de datos a través de una red.

Si su base de datos está en la misma máquina o está formalmente ''bien conectada'', probablemente sea mejor que la use.

Pero si está obteniendo un gran conjunto de resultados de una base de datos remota que podría significar un tiempo de transmisión significativo, o si es una consulta realmente corta que no justificará la sobrecarga, LINQ probablemente sea mejor.


Esta es una actuación dirigida por Maximilian Beller. Según él, LINQ es mucho más lento. Lea su estudio completo


LINQ to SQL en realidad presenta algunos problemas de rendimiento alarmantes en la base de datos. Básicamente, crea múltiples planes de ejecución basados ​​en la longitud del parámetro que está utilizando. Lo publiqué hace un tiempo en mi blog LINQ to SQL puede causar problemas de rendimiento .

Ahora, ¿es eso decir que LINQ no tiene un lugar? Apenas. LINQ definitivamente tiene un lugar en el kit de herramientas de desarrollo, al igual que los procedimientos almacenados. En última instancia, desea utilizar procedimientos almacenados cuando el rendimiento es absolutamente necesario y utilizar una herramienta ORM en cualquier otra situación.

En lo que respecta al SQL en línea, existen formas de ejecutar SQL en línea para que el plan solo se construya una vez y nunca se vuelva a compilar. La mayoría de los ORM también deberían ocuparse de este aspecto del ajuste del rendimiento y el uso de estos métodos suele ser la forma más segura de ejecutar SQL, ya que obliga a utilizar consultas parametrizadas.

Al igual que la mayoría de las soluciones de bases de datos, la respuesta correcta depende del problema que está tratando de resolver. Si favorece la velocidad de desarrollo sobre el rendimiento de la base de datos / aplicaciones, entonces el uso de LINQ u otra herramienta DAL / ORM es la mejor manera de hacerlo. Si favorece el rendimiento sobre la facilidad de desarrollo, entonces el uso de procedimientos almacenados y conjuntos de datos puros será su mejor opción. LLBLGen incluso proporciona una capa LINQ a LLBLGen para que pueda usar LINQ para consultar los objetos de LLBLGen y hacer que LLBLGen realmente maneje la creación de sus consultas y evitar algunas de las caídas de LINQ.


Si le interesa el benchmarking, Rico Mariani tiene un excelente estudio de 5 partes que cubre las diferencias cualitativas y cuantitativas.

Puede ser un tipo de MS, pero es conocido como un experto en rendimiento: sus puntos de referencia son minuciosos y están bien pensados.


Solo piense en cambiar el nombre de una columna: ahora cambie los (n) SP y (x) Vistas.

Haga todo lo que sea costoso en la base de datos (como búsquedas, clasificación, etc.) y no notará un problema.

Además, si desea mostrar una cuadrícula grande sin paginación ... entonces use un conjunto de datos, ese es más rápido.

también usa linq2sql - ¿ves un problema :)?

Use un ORM: es la forma de continuar en la mayoría de las aplicaciones.

PD: también, sobre micro benchmarks - como ... seleccionemos 10,000 filas con un ORM - NO LO HAGA. No es por eso que utilizas un ORM. Si desea seleccionar 10.000 filas, use ADO.


Tu premisa básica es defectuosa ...

Inline SQL requiere uno para comunicarse con la base de datos de una cierta manera que abre la base de datos a las inyecciones.

No, no. Los valores hard-codeing ingresados ​​por el usuario en una declaración SQL sí lo hacen, pero también podrías hacerlo con los procedimientos de la tienda.

La parametrización de las consultas protege contra los ataques de inyección, pero SQL en línea puede parametrizarse con la misma facilidad que los procedimientos almacenados.

El SQL en línea también debe verificarse con sintaxis, tener un plan creado y luego ejecutarse.

Todos los Sql (SP y en línea) deben estar verificados por sintaxis y tienen un plan creado en su primera llamada. A partir de entonces, el texto exacto de la solicitud y el plan de ejecución se almacenan en caché. Si se recibe otra solicitud con el mismo texto exacto (sin contar los parámetros), se utiliza el plan de ejecución en caché.

Por lo tanto, si codifica valores en SQL en línea, el texto no coincidirá y tendrá que volver a analizar la consulta. Sin embargo, si usa parámetros, el texto de la consulta coincidirá y obtendrá un golpe de caché. En ese caso, no importaría si la consulta en SQL en línea o un SP.

En otras palabras, el único problema con el SQL en línea es que es fácil hacer algo que sea lento e inseguro. Pero hacer SQL en línea rápido y seguro no es más trabajo que usar un SP.

Lo que nos lleva a LINQ, que siempre usa parámetros, incluso si codifica los valores en la declaración LINQ, haciendo que el SQL en línea "rápido y seguro" sea trivial.

LINQ también tiene la ventaja sobre los SP de tener todo tu código en un solo lugar, en lugar de dispersarlo en dos máquinas diferentes.


Debido a la estructura de LINQ to SQL, no hay forma posible de que sea más rápido que usar SQL sin formato, ya sea sus propias consultas bien formadas o como un procedimiento almacenado. Lo que LINQ le compra no es velocidad, sino seguridad y organización; En resumen, la mayoría de los beneficios que los ORM generalmente le otorgan.

LINQ to SQL no se trata de velocidad, se trata de construir un sistema de software más sostenible. Se trata de todas las cosas que les interesan a los Ingenieros de Software dedicados y a los Arquitectos, cosas como el acoplamiento flexible y las capas

Eso no quiere decir que no puedas construir un código realmente inmanejable con LINQ, nadie te impide dispararte en el pie, sino tú, pero hecho correctamente, LINQ puede ser de gran ayuda. No digo que LINQ sea una bala de plata, sin embargo. Tiene una serie de problemas que dificultan el uso en muchas situaciones empresariales, por lo que MS ofrece Entity Framework (ADO.NET 3.0). Por supuesto, incluso eso no es perfecto dado el reciente voto de EF de No Confidence.

¿Es LINQ to SQL o incluso EF mejor que SQL sin formato? Diría un resonante Hells Yeah. ¿Hay otras soluciones que podrían funcionar mejor? Tal vez.