我在sqlite数据库之上有一个数据访问对象(DAO)。这个DAO有:
碰巧有一些争论:
现在,我们注意到如果索引服务正在运行,那么图像缩略图的读取速度明显变慢。
原因是我们正在使用FMDB Objective-C包装器来实现sqlite。它与数据库有一个同步队列,以确保线程安全。
是否有一种通用的方法来优先处理sqlite读取,特别是使用FMDB?
答案 0 :(得分:1)
根据您打开数据库的方式(即:.shm和.wal并发),现在这可能不是问题了?否则,一个选项可能是添加你自己的抽象(即:JBReadWriteDatabaseQueue
),它在内部同时具有读取和写入块数组(或它们自己的队列)。然后它可以公开readInDatabase:
和writeInDatabase
之类的方法,如果没有运行,可以将块直接传递给fmdb队列,如果它正在运行则存储它们。完成当前的fmdb块后,如果有条目,则此类可以优先从读取块数组中进行选择。
如果读取数组永远不会清除,那么这会进一步变成有趣的情况,比如写入饥饿,但是嘿,这就是并发生活吗?