Saltar al contenido

System.Data.SQLite frente a Microsoft.Data.Sqlite

Solución:

Una ventaja de System.Data.SQLite es que está desarrollado por el equipo de SQLite que ha declarado un compromiso a largo plazo para mantenerlo compatible.

Una ventaja de Microsoft.Data.Sqlite es que está desarrollado por Microsoft y se puede suponer que está bien probado con Entitity Framework, .NET Core, etc.

Elegí System.Data.SQLite para mi proyecto, una de las razones es que utilizo el método GetBytes () DataReader que “no es compatible” en Microsoft.Data.Sqlite.

No he probado el rendimiento, sin embargo, no me sorprendería si Microsoft.Data.Sqlite gana, ya que afirma ser un contenedor más delgado. Vea abajo.

Hay un comentario informativo de Brice Lambson, uno de los desarrolladores de Microsoft.Data.Sqlite aquí: https://www.bricelam.net/2018/05/24/microsoft-data-sqlite-2-1.html#comment- 3980760585

Él dice,

“Hay tres diferencias principales entre Microsoft.Data.Sqlite y System.Data.SQLite.

“En primer lugar, no pretendemos ser un proveedor de ADO.NET con todas las funciones. Microsoft.Data.Sqlite se creó para .NET Core 1.0 cuando el objetivo era crear una versión modernizada y más ligera de .NET. Ese objetivo de .NET Core se ha abandonado en gran medida a favor de agregar tantas API como sea posible para facilitar la migración desde otros tiempos de ejecución de .NET. Sin embargo, el objetivo de Microsot.Data.Sqlite sigue siendo solo proporcionar una implementación básica de ADO.NET suficiente para admitir marcos de acceso a datos modernos como EF Core, Dapper, etc. Tendemos a no agregar API para las cosas que se pueden hacer con SQL. Por ejemplo, consulte este comentario para conocer las alternativas de SQL a las palabras clave de cadena de conexión.

“La segunda gran diferencia es que estamos mucho más cerca del comportamiento nativo de SQLite. No intentamos compensar ninguna de las peculiaridades de SQLite. Por ejemplo, System.Data.SQLite agrega semántica .NET a los nombres de tipo de columna. Incluso tenemos que analizar cada declaración SQL antes de enviarla al controlador nativo para manejar una declaración SQL personalizada para especificar el tipo de columna de resultados que no provienen directamente de una columna de tabla (es decir, expresiones en la cláusula SELECT). En su lugar, aceptamos el hecho de que SQLite solo admite cuatro tipos primitivos (INTEGER, REAL, TEXT y BLOB) e implementa las API de ADO.NET de una manera que le ayuda a coaccionar valores entre estos y los tipos .NET.

“Finalmente, no fuimos escritos hace 10 años. 🙂 Esto nos permite crear API más modernas que se sienten más naturales en C # moderno e idiomático. La API para registrar funciones definidas por el usuario es el mejor ejemplo de esto”.

Probé System.Data.SQLite y Microsoft.Data.SQLite en un proyecto, y realicé una prueba de rendimiento en el mundo real, System.Data.SQLite es aproximadamente 3 veces más rápido que Microsoft.Data.Sqlite cuando se realiza una inserción masiva.

Un hallazgo más, a partir de hoy (6 de marzo de 2020), System.Data.SQLite no proporciona un binario compilado para linux arm. Tienes que hacerlo manualmente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *