我有一个 C# .NET 应用程序和一个托管在网络共享(可能是 windows server 2003)上的 sqlite 数据库文件。
问题是 sqlite 的常见问题解答说文件锁定可能是不可靠的。
所以我的问题是它是否仅在 nfs 共享(参见此讨论)上不可靠,或者在 Windows Server 2003 使用的 SMB/CIFS 共享上不可靠?
如果它在 SMB/CIFS 共享上也不可靠,我有以下两种解决方法:
使用临时文件进行锁定:
try
{
using (FileStream fs = File.Create("lock.tmp", 1000,
FileOptions.DeleteOnClose))
{
db.savechanges();
}
}
catch(Exception ex) { /* retry later */ }
使用临时目录创建进行锁定:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CreateDirectory(string lpPathName,
IntPtr lpSecurityAttributes);
if(CreateDirectory("lock.tmp", IntPtr.Zero))
{
db.savechanges();
Directory.Delete("lock.tmp");
} else { /* retry later */ }