0

我有一个 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 */ }
4

0 回答 0