Я думаю, что вы делаете , появляющийся , чтобы ускорить загрузку базы данных, потому что метод VectorizeView
возвращается до загрузки данных. Затем загрузка продолжается в фоновом режиме и завершается (вероятно) в то же время, что и раньше.
Вы можете проверить эту теорию, добавив вызов thread.join()
после вызова thread.start()
.
Если это именно то, что происходит, вам, вероятно, нужно что-то сделать, чтобы другие части вашего приложения не могли получить доступ к объекту table
до завершения загрузки. В противном случае ваше приложение может вести себя некорректно, если пользователь что-то сделает слишком рано после запуска.
FWIW, загрузка 100 или 500 записей из базы данных должна быть быстрой, если сам запрос не является дорогостоящим для базы данных. Это не должно иметь место для простого выбора из таблицы ... если только вы на самом деле не выбираете из представления, а не из таблицы, и представление плохо спроектировано. В любом случае, вам, вероятно, лучше сосредоточиться на том, почему такой простой запрос занимает столько времени, чем пытаться запустить его в отдельном потоке.
В своем выступлении вы говорите, что версия с join
после start
такая же быстрая, как и без нее.
Моя первая реакция - сказать: "Оставьте join
там. Вы устранили проблему."
Но это не объясняет, что на самом деле происходит. И теперь я совершенно сбит с толку. Лучшее, что я могу придумать, это то, что ваше приложение делает до , это в текущей нити является причиной этого.
Возможно, вам следует выяснить, что приложение делает в период, когда это происходит. Посмотри, сможешь ли ты выяснить, где все время тратится.
- Возьми дамп нити и посмотри на нити.
- Запустите его под отладчиком, чтобы увидеть, где происходит «пауза».
- Профиль.
- Установите ведение журнала приложения на высокий уровень и посмотрите, есть ли какие-либо подсказки.
- Проверьте журналы базы данных.
- Etcetera