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