我正在一个具有多个 C++ 和一些 C# 组件的项目中工作。我目前正在开发一个新的 C# 组件,该组件需要与 C++ 组件共享数据(将来可能会有更多组件访问它)。所有组件都在同一个进程中运行。我目前的想法是使用内存数据库,但我不确定是否可行。
SQLite 很流行,可用于 C++ 和 C# 项目,并且它具有内存功能。问题是是否可以从两个组件访问同一个数据库,例如,我可以在我的 C# 项目中使用 C++ 中创建的 db(指针)的句柄吗?
我正在一个具有多个 C++ 和一些 C# 组件的项目中工作。我目前正在开发一个新的 C# 组件,该组件需要与 C++ 组件共享数据(将来可能会有更多组件访问它)。所有组件都在同一个进程中运行。我目前的想法是使用内存数据库,但我不确定是否可行。
SQLite 很流行,可用于 C++ 和 C# 项目,并且它具有内存功能。问题是是否可以从两个组件访问同一个数据库,例如,我可以在我的 C# 项目中使用 C++ 中创建的 db(指针)的句柄吗?
是的,这是可能的。当然,您需要共享一些数据结构和句柄(如您所说)。这样 SQLite 就无法检测到托管代码和本机代码之间的任何差异。因此,行为上没有区别。
如果您只使用 PInvoke 或 C++/CLI 来交换数据结构,可能会更容易。仅仅为了在进程中传递数据而启动整个 SQL 数据库似乎很浪费。
是的你可以。sqlite 数据库在内存中,但它作为文件驻留在磁盘上。当您关闭数据库连接时,它会刷新到磁盘上的文件中。因此,您基本上可以在一个组件写入中打开数据库连接并关闭连接,以便其他组件可以读取/写入数据库。它与您操作文件的方式类似,只是它是在内存中而不是在磁盘上管理的,因此比文件快一点。但是,如果您的意图是 C++ 和 C# 之间的 IPC,那么还有其他更好的方法。