并发访问 ESENT PersistentDictionary

Concurrent access to ESENT PersistentDictionary

我正在使用托管 ESENT PersistentDictionary class 让我的 C# 应用程序在网络共享上存储数据。一切都很好,但有一个警告。当我尝试从多台客户端计算机(所有 运行 我的应用程序)访问数据库时,我有时会收到消息 "System path already used by another database instance".

的异常

根据文档,我了解到 ESENT 支持并发,所以这应该不是问题。我做错了什么?

谢谢。

有点误会。 ESENT支持多线程并发,不支持多进程并发。 esent.dll 以独占方式打开文件,因此任何其他进程都将获得 ACCESS_DENIED(只读模式除外——多个进程可以以只读模式打开数据库)。

此外,SMB 上的文件锁定不像本地文件系统访问那样严格,而且缓存行为也不同。不建议您在远程 SMB 共享上拥有数据库,尽管在现实生活中您可能不会遇到问题。 (其中一些指南是基于旧版本的 SMB。较新的版本可能已经对实现细节进行了足够的更改,因此它可以完美运行——我想我只是了解不够。:)

为了实现多机访问,您必须编写自己的服务器进程来处理来自其他机器的请求。对不起。

-马丁