Подтвердить что ты не робот

В С# есть ли способ иметь файл в памяти, связанный как база данных SQLite в памяти с System.Data.SQLite?

Что я хочу сделать, это что-то вроде следующих:

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
}

Я не планирую писать в БД памяти, но перед подключением к нему мне нужно сделать что-то с файлом в памяти в моей программе.

4b9b3361

Ответ 1

Если вы не против использования Interop и напрямую CreateFile() (затем обертывание возвращенной HANDLE в FileStream), вы можете принять посмотрите на создание файла с указанным FILE_ATTRIBUTE_TEMPORARY, который не будет записывать файл на диск, если имеется кэш-память, и которая автоматически удалит файл, когда его дескриптор будет закрыт.

Задание атрибута FILE_ATTRIBUTE_TEMPORARY приводит к тому, что файловые системы не должны записывать данные обратно в массовое хранилище, если имеется достаточная кэш-память, потому что приложение удаляет временный файл после закрытия дескриптора. В этом случае система может полностью избежать записи данных. Хотя он напрямую не контролирует кеширование данных так же, как ранее упомянутые флаги, атрибут FILE_ATTRIBUTE_TEMPORARY говорит, что система должна хранить как можно больше в системном кеше без записи и, следовательно, может быть обеспокоена некоторыми приложениями.