我正在使用托管的ESENT PersistentDictionary类来让我的 C# 应用程序将数据存储在网络共享上。这一切都很好,有一个警告。当我尝试从多台客户端计算机(都运行我的应用程序)访问数据库时,有时会收到异常消息“系统路径已被另一个数据库实例使用”。
从文档中,我收集到 ESENT 支持并发,所以这应该不是问题。我究竟做错了什么?
谢谢你。
我正在使用托管的ESENT PersistentDictionary类来让我的 C# 应用程序将数据存储在网络共享上。这一切都很好,有一个警告。当我尝试从多台客户端计算机(都运行我的应用程序)访问数据库时,有时会收到异常消息“系统路径已被另一个数据库实例使用”。
从文档中,我收集到 ESENT 支持并发,所以这应该不是问题。我究竟做错了什么?
谢谢你。
有一点小误会。ESENT 支持多线程并发,但不支持多进程并发。esent.dll
以独占方式打开文件,因此任何其他进程都将获得ACCESS_DENIED
(只读模式除外——多个进程可以以只读模式打开数据库)。
此外,SMB 上的文件锁定不像本地文件系统访问那样严格,缓存行为也不同。不建议您在远程 SMB 共享上拥有数据库,尽管在现实生活中您可能不会遇到问题。(其中一些指导基于旧版本的 SMB。较新的版本可能已经对实现细节进行了足够的更改,因此它可以完美运行——我想我只是不太了解。:)
为了获得多机访问,您必须编写自己的服务器进程来处理来自其他机器的请求。对不起。
-马丁