2017-06-06 47 views
0

我正在使用託管的ESENT PersistentDictionary類來讓我的C#應用​​程序將數據存儲在網絡共享上。這一切都很好,只有一個警告。當我嘗試從多臺客戶端計算機(全部運行我的應用程序)訪問數據庫時,我有時會收到一條異常消息「系統路徑已被另一個數據庫實例使用」。併發訪問ESENT PersistentDictionary

從文檔,我收集比ESENT支持併發性,所以這應該不成問題。我究竟做錯了什麼?

謝謝。

回答

1

有一個小小的誤解。 ESENT支持多線程併發,但不支持多進程併發。 esent.dll專門打開該文件,因此任何其他進程都將獲得ACCESS_DENIED(除了只讀模式 - 多個進程可以在只讀模式下打開數據庫)。

另外,SMB上的文件鎖定並不像本地文件系統訪問那樣嚴格,並且緩存行爲也不同。不建議您在遠程SMB共享上擁有數據庫,儘管在實際中您可能不會遇到任何問題。 (其中一些指導是基於較舊版本的SMB,新版本可能已經改變了實施細節,使其完美工作 - 我想我只是不知道足夠多。:)

爲了讓多機器訪問,您必須編寫自己的服務器進程來處理來自其他機器的請求。抱歉。

-martin

+0

非常感謝。這澄清了很多事情。 – CesarGon