我应该如何使用MvvmCross-SQLite社区版在多线程应用程序中建立连接?

chr*_*lch 5 sqlite multithreading mvvmcross windows-phone-8

我们在Windows Phone 8上的mvvmcross应用程序中使用Community.MvvmCross-SQLite项目时遇到一些问题.我们有一些后台线程(使用Task.Run())读取/写入数据库以响应来自服务器 - 由于更新可能需要几秒钟,因此我们不希望UI冻结.

在运行应用程序时,我们会遇到一些崩溃,我们会看到"数据库丢失或损坏"等消息,在调试情况时,我们会看到从后台线程访问数据库时崩溃.

我们尝试在整个项目中使用一个通用的SqliteConnection,每次我们尝试写入数据库时​​,我们都会在lock()语句中封装调用.

  • 是否可以使用相同的连接,还是应该为每个操作创建新的连接?
  • 底层Community.CSharpLiteSqlite.WP7库中多线程支持的状态是什么?

Eld*_*dho 0

SQLite 和多线程

SQLite 支持三种不同的线程模式:

1.单线程。在这种模式下,所有互斥体都被禁用,并且 SQLite 在多个线程中同时使用是不安全的。

2.多线程。在此模式下,只要两个或多个线程中没有同时使用单个数据库连接,SQLite 就可以安全地由多个线程使用。

3.系列化。在序列化模式下,SQLite可以不受限制地被多个线程安全地使用。

SqliteTheadSafe 文档