在C#中,是否有一种方法可以使用System.Data.SQLite将内存文件链接为内存SQLite数据库?

28

我想要做的是类似于以下内容:

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
}
我不打算写入内存数据库,但我需要在连接到它之前,在程序中对文件进行一些操作并将其保存在内存中。

2
你可以使用SQLite内存数据库并通过SQLite进行操作,或者将内存流写入临时文件并打开它。 - Arne Claassen
连接到文件之前,您需要对文件进行哪些“操作”? - RQDQ
1
我希望能够编辑该流。除非上述的方法是可行的,否则我的理由并不重要。 - Mike Webb
2个回答

3
如果您不介意使用Interop并直接转到 CreateFile() (然后将返回的HANDLE包装在FileStream中),则可以尝试使用FILE_ATTRIBUTE_TEMPORARY指定创建文件,只要有缓存内存可用,就不会将文件写入磁盘,并且在其句柄关闭时自动删除文件。指定FILE_ATTRIBUTE_TEMPORARY属性会导致文件系统避免在有足够缓存内存的情况下将数据写回到大容量存储器中,因为应用程序在关闭句柄后会删除临时文件。在这种情况下,系统可以完全避免写入数据。虽然它不像先前提到的标志一样直接控制数据缓存,但FILE_ATTRIBUTE_TEMPORARY属性确实告诉系统尽可能多地保留在系统缓存中而不写入,因此可能对某些应用程序有影响。

0

使用Interop和CreateFile()过于复杂。这里有一种简单的方法来创建文件,并具有FILE_ATTRIBUTE_TEMPORARY属性,它将尽可能多地使用缓存内存:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接