首页 > 解决方案 > SQLite 数据库在另一个线程执行删除时从一个线程写入/更新记录的问题

问题描述

我有一个 Xamarin.Android 应用程序并使用 SQLite 作为数据库(来自 NuGet 的 SQLite.Net)。我在调用更新表中的单行时遇到问题,它有时会等待/阻塞长达 2 分钟才能完成。

我有一个计时器/线程,它在同一个表上执行一些数据库操作,作为数据清理/同步的一种形式,它调用另一个方法(在同一个类中)来执行一些数据的删除和插入。

需要注意的是,我所有的数据方法都在 using 块中创建了自己的连接。似乎对此存在争议,但根据 Microsoft 文档,这是推荐的方法。

我认为当我尝试使用第一种方法进行更新而第二种方法忙于进行一些删除和插入时,我的延迟就会发生。

我确实启用了 WAL 并且没有在事务中运行。问题是,SQLite 默认情况下是否具有表级锁定,它会阻止第一种方法,而另一种方法正在执行一些删除或插入操作?如果是这样,即使它也来自两个不同的连接,它也会这样做吗?

如果是这种情况,似乎阻塞不会立即释放。有没有办法让事情发生得更快?我还怀疑如果 WAL 阻塞直到 WAL 执行检查点,它可能会导致该问题?

谢谢!

标签: .netsqlitexamarin.android

解决方案


推荐阅读