【发布时间】:2018-05-05 13:03:58
【问题描述】:
我正在开发一个使用 sqlite 数据库的 iPhone 应用程序。该应用程序在主线程中使用 UI 在后台线程中从 Internet 下载数据。后台下载线程可以对数据库执行 INSERT、UPDATE 和 SELECT。 UI 层还可以通过执行 UPDATE 和 SELECT 与数据库进行交互。如果在后台线程下载时我没有与 UI 进行大量交互,那么一切正常。但是,当下载正在进行时,在主 (UI) 线程上执行大量更新时,我开始遇到问题。
在对数据库的每个查询中,我都使用@synchronized 语句,但这并不能解决问题。当查询(来自 UI 和来自后台线程)同时执行时,会导致数据丢失。在主线程中更新数据也可以像在后台一样执行(如果它们彼此分开执行)。
数据库有 sqlite3_threadsafe() == 2; 对于所有查询,我正在使用一个连接,可能问题隐藏在此?
【问题讨论】:
-
为什么要手写SQL?使用 FMDB 或其他一些包装器。他们通常也有不错的三个文档。更好的是,使用核心数据。它具有出色的线程模型。
-
我只是继续开发它,另一个开发者做到了。
标签: objective-c database multithreading performance sqlite