2017-06-06 23 views
0

管理されたESENT PersistentDictionaryクラスを使用して、C#アプリケーションでネットワーク共有にデータを格納するようにしています。 1つの警告で、すべてがうまくいきます。私は、複数のクライアントコンピュータ(すべて私のアプリケーションを実行している)からデータベースにアクセスしようとすると、「別のデータベースインスタンスによって既に使用されているシステムパス」というメッセージで例外が発生することがあります。ESENT PersistentDictionaryへの同時アクセス

ドキュメントからは、ESENTが並行処理をサポートするよりも集まっているので、これは問題ではありません。私は間違って何をしていますか?

ありがとうございます。

答えて

1

多少の誤解があります。 ESENTはマルチスレッドの並行処理をサポートしますが、マルチプロセス並行処理はサポートしていません。 esent.dllはファイルを排他的に開き、他のプロセスはACCESS_DENIEDになります(読み取り専用モードを除く - 複数のプロセスが読み取り専用モードでデータベースを開くことができます)。

さらに、SMBでのファイルロックは、ローカルファイルシステムアクセスほど厳密ではなく、キャッシングの動作も異なります。リモートSMB共有にデータベースを置くことはお勧めできませんが、現実には問題はないでしょう。 (そして、そのガイドの中にはSMBの古いバージョンに基づいたものもありました。新しいバージョンでは実装の詳細が十分に変更されているため、完全には動作しませんでした。マルチマシンアクセスでは、他のマシンからの要求を処理する独自のサーバープロセスを作成する必要があります。ごめんなさい。

-martin

+0

非常に感謝します。これは多くのことを明確にします。 – CesarGon

関連する問題