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

时间:2014-02-19 14:26:26

标签: multithreading sqlite windows-phone-8 mvvmcross

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

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

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

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

1 个答案:

答案 0 :(得分:0)

SQLite和多线程

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

1.单螺纹。在此模式下,所有互斥锁都被禁用,并且SQLite一次不能在多个线程中使用。

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

3.Serialized。在序列化模式下,SQLite可以被多个线程安全地使用而没有任何限制。

SqliteTheadSafe Documentatioon