3

私は、いくつかの C++ コンポーネントといくつかの C# コンポーネントを備えたプロジェクトに取り組んでいます。私は現在、C++ コンポーネントとデータを共有する必要がある新しい C# コンポーネントに取り組んでいます (将来、これにアクセスするコンポーネントが増える可能性があります)。すべてのコンポーネントが同じプロセスで実行されています。私の現在のアイデアは、メモリ内データベースを使用することですが、それが可能かどうかはわかりません。

SQLite は C++ と C# の両方のプロジェクトで広く使用されており、インメモリ機能を備えています。問題は、両方のコンポーネントから同じデータベースにアクセスできるかどうかです。たとえば、C# プロジェクトで C++ で作成されたデータベース (ポインター) へのハンドルを使用できますか?

4

2 に答える 2

3

はい、それは可能です。もちろん、いくつかのデータ構造とハンドルを共有する必要があります (あなたが言うように)。そうすれば、SQLite はマネージ コードとネイティブ コードの違いを検出できません。したがって、動作に違いはありません。

PInvoke または C++/CLI を使用してデータ構造を交換する方が簡単かもしれません。処理中のデータを渡すためだけに SQL データベース全体をスピンアップするのは無駄に思えます。

于 2013-02-25T14:33:25.670 に答える
0

はい、できます。sqlite データベースはメモリ内にありますが、ディスク上にファイルとして存在します。データベース接続を閉じると、ディスク上のファイルにフラッシュされます。したがって、基本的には、1 つのコンポーネントの書き込みで db 接続を開き、接続を閉じて、他のコンポーネントが db に読み書きできるようにすることができます。ディスクではなくメモリで管理されるため、ファイルよりも少し高速であることを除いて、ファイルの操作方法とまったく同じです。しかし、あなたの意図が c++ と c# の間の IPC である場合は、他のより良い方法があります。

于 2013-02-25T14:34:08.887 に答える