c# sqlite connection system.data.sqlite in-memory-database

En C#, ¿hay alguna forma de tener un archivo en memoria vinculado como una base de datos SQLite en memoria con System.Data.SQLite?



sqlite pdf (2)

Si no le importa usar Interop e ir directamente a CreateFile() (luego envolver el HANDLE devuelto en un FileStream) puede echar un vistazo a la creación del archivo con FILE_ATTRIBUTE_TEMPORARY especificado que no escribirá el archivo en el disco mientras exista memoria caché disponible y que eliminará automáticamente el archivo cuando se cierre su identificador.

La especificación del atributo FILE_ATTRIBUTE_TEMPORARY hace que los sistemas de archivos eviten volver a escribir datos en el almacenamiento masivo si hay suficiente memoria caché disponible, porque una aplicación elimina un archivo temporal después de que se cierra un identificador. En ese caso, el sistema puede evitar por completo la escritura de los datos. Aunque no controla directamente el almacenamiento en caché de datos de la misma manera que los indicadores mencionados anteriormente, el atributo FILE_ATTRIBUTE_TEMPORARY indica al sistema que almacene todo lo posible en el caché del sistema sin escribir y, por lo tanto, puede ser motivo de preocupación para ciertas aplicaciones.

Lo que quiero hacer es algo como lo siguiente:

using System.Data.SQLite; using System.IO; //My SQLite connection SQLiteConnection myCon; public void ReadAndOpenDB(string filename) { FileStream fstrm = new FileStream(filename, FileMode.Open); byte[] buf = new byte[fstrm.Length]; fstrm.Read(buf, 0, (int)fstrm.Length); MemoryStream mstrm = new MemoryStream(buf); //Do some things with the memory stream myCon = new SQLiteConnection(/*attach to my memory stream for reading*/); myCon.Open(); //Do necessary DB operations }

No planeo escribir en la base de datos en memoria, pero necesito poder hacer algunas cosas con el archivo, en la memoria de mi programa, antes de conectarme a él.


Usar Interop y CreateFile () es demasiado complejo. Aquí hay una forma sencilla de crear un archivo con el atributo FILE_ATTRIBUTE_TEMPORARY que usará la memoria caché tanto como sea posible:

var file = File.Create(path); File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Temporary);