Для повышения скорости отклика некоторые синхронные методы, использующие FMDB для выполнения запросов SQLite в главном потоке, были переписаны как асинхронные и выполнялись в фоновом режиме с помощью -performSelectorInBackground:withObject:
. SQLite не является поточно-ориентированным, однако каждый из этих методов в конечном итоге вызовет -[FMDatabase open]
, что приведет к снижению общей производительности.
Итак, я написал прокси для классов FMDB, который переопределил -forwardInvocation:
для выполнения -[NSInvocation invokeWithTarget:]
в одном конкретном потоке через -performSelector:onThread:withObject:waitUntilDone:
. Это решило проблему слишком большого количества вызовов на -[FMDatabase open]
, но -forwardInvocation:
сам по себе довольно дорогой.
Есть ли хороший способ решить эту проблему производительности, не переписывая весь код, который вызывает методы FMDB?