使用内存中的SQLite数据库在C++和C#之间共享数据

Sharing data between C++ and C# using an in-memory SQLite database?

本文关键字:C++ 之间 数据 共享 数据库 内存 SQLite      更新时间:2023-10-16

我在一个项目中工作,该项目包含几个C++和一些C#组件。我目前正在开发一个新的C#组件,该组件需要与C++组件共享数据(未来可能会有更多组件访问此组件(。所有组件都在同一进程中运行。我目前的想法是使用内存中的数据库,但我不确定这是否可行。

SQLite很受欢迎,可用于C++和C#项目,并且它具有内存功能。问题是,如果可以从两个组件访问同一个数据库,例如,我可以在C#项目中使用用C++创建的数据库(指针(的句柄吗?

是的,那是可能的。当然,您需要共享一些数据结构和句柄(正如您所说(。这样一来,SQLite就无法检测托管代码和本机代码之间的任何差异。因此,行为上不可能有任何差异。

如果只使用PInvoke或C++/CLI来交换数据结构,可能会更容易。仅仅为了在进程中传递数据而旋转整个SQL数据库似乎是浪费。

可以。sqlite数据库在内存中,但它作为文件驻留在磁盘上。当您关闭数据库连接时,它会被刷新到磁盘上的文件中。因此,您基本上可以在一个组件写入中打开数据库连接,然后关闭连接,以便其他组件可以读取/写入数据库。它与操作文件的方式类似,只是它是在内存中管理的,而不是在磁盘上管理的,所以比文件快一点。但是,如果你的意图是在c++和c#之间进行IPC,还有其他更好的方法。