Почему метод DAO такой медленный в ORMLite?
У меня есть метод, который выглядит так
public Dao<ModelStore, Integer> getDaoStore() throws SQLException {
return BaseDaoImpl.createDao(getConnectionSource(), ModelStore.class);
}
когда я звоню getDaoStore
это довольно длительный процесс. В моем журнале я вижу, что GC запускается после каждого вызова, так что я предполагаю, что с этим вызовом многое происходит.
Есть ли способ ускорить это?
1 ответ
Глубокое изучение Android-земли показало, что из-за Method.equals()
Метод, аннотации под Android очень медленные и чрезвычайно интенсивно работают с GC. Мы добавили файлы конфигурации таблиц в версии 4.26, которые обошли это и сделали запуск ORMLite намного, намного быстрее. Смотрите этот вопрос и эту ветку в списке рассылки.
Мы продолжаем улучшать скорость аннотаций. Смотрите также: ORMLite плохая производительность на Android?
Создание DAO - это относительно дорогой процесс. ORMLite создает представление данных как класса, так и полей в классе и создает ряд других служебных классов, которые помогают с различными функциями DAO. Вы должны убедиться, что вы звоните createDao
метод один раз за вызов. Я предполагаю, что это под Android @Pzanno?
В 4.16 мы добавили DaoManager
чья работа заключается в кэшировании классов Dao, и это было улучшено в версии 4.20. Затем вы всегда должны использовать его для создания своего Daos. Рекомендуется что-то вроде следующего кода:
private Dao<ModelStore, Integer> modelStoreDao = null;
...
public Dao<ModelStore, Integer> getDaoStore() throws SQLException {
if (modelStoreDao == null) {
modelStoreDao = DaoManager.createDao(getConnectionSource(),
ModelStore.class);
}
return modelStoreDao;
}
Надеюсь это поможет. Аудит памяти ORMLite, вероятно, также в порядке. Прошло много времени с тех пор, как я посмотрел на потребление.