同じインメモリ データベース インスタンスを複数の AppDomains で使用できる、インメモリ データベースの実装があるのではないかと思います。
動機。多くの人と同じように、クライアント サーバー アプリケーションの統合テストがあります。クライアント、サーバー、およびデータベースがすべて異なるマシンに配置されている実際のシナリオから、クライアントとサーバーの両方が同じプロセス内の単純な 2 つの AppDomain である最も軽量なものまで、いくつかのテスト モードがあります。データベースは同じマシン上の sqlite ファイルです。
当然のことながら、軽量のシナリオが最も高速であり、開発者は日常的にそれを使用しますが、重いシナリオはビルドごとに CI サーバーで実行されます。
私の目標は、インメモリ データベースを使用して軽量シナリオをさらに高速化することです。
問題。OK、sqlite にはメモリ内データベース オプションがありますが、そのようなデータベースは次のようになります。
- への接続が閉じられた後に破棄されます。
- 2 つの接続を開くことはできません。新しい接続は別のデータベース インスタンスを開きます。
残念ながら、2 つ必要です。1 つはクライアント側の AppDomain で実行されるテスト ステージング コード用で、もう 1 つはサーバー側の DAL 用です。
sqlite インメモリ データベースの仕組みの背後にある理論的根拠を理解しています。また、2 つの AppDomain 間でメモリ内データベースを共有することの難しさも認識しています。メモリ マップされたファイルに戻らずに、2 つの AppDomains 間でメモリ バッファを共有するにはどうすればよいですか (また、ファイル システム API を扱いたくありません)。
私が見る唯一の効率的な解決策は、2 つの AppDomain でアンマネージ メモリ バッファーを共有することです。このバッファーへのハンドルは、ある AppDomain から別の AppDomain に渡されます。しかし、このセットアップをサポートするメモリ内データベースの実装はありますか?
(非効率的な解決策は、ある AppDomain から別の AppDomain にデータベース全体を渡し、再度戻すことです)。
私の分析は完全に間違っている可能性があり、見逃している簡単な解決策があるかもしれません。とにかく、誰かが同じ問題に遭遇したかどうか、そしてどのように解決したかを知りたい.
PS
メモリにマップされたファイルなど、あらゆる種類のファイル API は避けたいと思います。