我在sqlite数据库的顶部有一个数据访问对象(DAO)。该DAO具有:
碰巧有一些争论:
现在,我们注意到,如果索引服务正在运行,则图像缩略图的读取会明显变慢。
原因是我们将FMDB Objective-C包装器用于sqlite。并且它具有到数据库的同步队列,以确保线程安全。
是否有一种通用的方法来使sqlite的读取优先于写入,尤其是对于FMDB?
根据您打开数据库的方式(即:.shm和.wal并发性),这现在可能不再是问题了?否则,一个选项可能是添加您自己的抽象(即JBReadWriteDatabaseQueue
),该抽象在内部具有块的读取和写入数组(或它们自己的队列)。然后readInDatabase:
,writeInDatabase
它可能会公开类似之类的方法,如果什么也没有运行,则可能直接将其传递给fmdb队列,或者如果它们正在运行,则将其存储。当前fmdb块完成时,此类可以优先从读取的块数组中进行选择(如果那里有条目)。
如果读数组永远不会清除,那么这确实会陷入诸如写饥饿之类的有趣情况,但是,嘿,并发生命是这样吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句