.net - SQLite 数据库在另一个线程执行删除时从一个线程写入/更新记录的问题
问题描述
我有一个 Xamarin.Android 应用程序并使用 SQLite 作为数据库(来自 NuGet 的 SQLite.Net)。我在调用更新表中的单行时遇到问题,它有时会等待/阻塞长达 2 分钟才能完成。
我有一个计时器/线程,它在同一个表上执行一些数据库操作,作为数据清理/同步的一种形式,它调用另一个方法(在同一个类中)来执行一些数据的删除和插入。
需要注意的是,我所有的数据方法都在 using 块中创建了自己的连接。似乎对此存在争议,但根据 Microsoft 文档,这是推荐的方法。
我认为当我尝试使用第一种方法进行更新而第二种方法忙于进行一些删除和插入时,我的延迟就会发生。
我确实启用了 WAL 并且没有在事务中运行。问题是,SQLite 默认情况下是否具有表级锁定,它会阻止第一种方法,而另一种方法正在执行一些删除或插入操作?如果是这样,即使它也来自两个不同的连接,它也会这样做吗?
如果是这种情况,似乎阻塞不会立即释放。有没有办法让事情发生得更快?我还怀疑如果 WAL 阻塞直到 WAL 执行检查点,它可能会导致该问题?
谢谢!
解决方案
推荐阅读
- javascript - 如何将单个对象对象转换为对象数组?
- winforms - Windows 窗体 - 单击按钮将数据添加到列表视图
- java - 比较子实体列表时获取父实体 ID
- r - 如何在 kknn 函数中进行预测?图书馆(kknn)
- python - 如何将数组相乘以输出多个数组而不是相乘的值?
- python - 运行 tox 时如何修复“envreport”中的“UnicodeDecodeError”?
- vim - 紧迫
突然映射到 Esc(而不是字符“#” - jquery - 使用 jquery 解析 json 并在 ayyas 上捕获一些值
- c# - 一种解析多维字符串数组以列出c#的方法
- javascript - Ackermann 函数导致超出最大调用堆栈大小错误