Я довольно далеко развил приложение Kivy. Он предназначен для Android, но также будет работать (одновременно с другой кожей) на настольных компьютерах и, надеюсь, в будущем.Python on android (kivy) - узкие места для определенных операций?
Основные зависимости я сильно использую являются: -
витую - используя это как IPC, мое приложение имеет сервер/клиент связь между манипулированием данными и пользовательский интерфейс
Свист - для поиска текста
xmltodict - для легкого манипулирования XML
У меня ДЕЙСТВИТЕЛЬНО длительное время запуска приложений на Android, на сравнительно недавнем телефоне, который не сулит ничего хорошего. Из моих грубых таймингов (на основе time.time() и вычитая из моего инициализации времени приложения): -
Мое приложение получает управление от kivy запуска около 1 секунды в
Моего инициализации пользовательских классов и т.д. делается на 2,4 второго знака
на второй отметке 14.4, я, наконец, завершить большую часть моей загрузки данных
на 17 сек econd знак, я начинаю посылать данные к клиентскому UI с помощью витой
На второй отметке 22, интерфейс получает данные
Там в несколько точек, которые я хочу обратиться туда. Например, примерно 5-секундный промежуток для отправки данных может быть легко разбит на части и обновлен в пользовательском интерфейсе по частям, поэтому я сохраню это позже, но мне нужно спросить о длинном 12-секундном промежутке для загрузки данных. Эта загрузка данных включает в себя создание около 1000 экземпляров пользовательского класса, со следующими шагами (общее время более 1000 экземпляров): -
Чтение данных из файлов 1000 текстовых XML (0,734 секунд)
Разбор XML в считанных данных (9.198 секунд)
Заполнение переменных объекта на основе проанализированной XML (0,585 секунд)
дерева каталогов обхода (использовать это, чтобы найти определенная базовая папка, 0.0824 секунд)
измерение времени изменения для XML-файлов (0.12 секунд)
Измеренных тайминги меня удивили, потому что эквивалентные тайминги для запуска той же коды на моем ноутбуке являются 0,041 , 0,9, 0,062, 0,009 и 0,016). Все примерно в 10 раз медленнее.
Что, если что-нибудь, я могу сделать по этому поводу? Телефон, используемый для тестирования, имеет 3 ГБ оперативной памяти и процессор Snapdragon 801, поэтому я очень беспокоюсь об использовании этого приложения на более медленных/старых моделях. Мои первоначальные мысли заключались в том, что замедление произошло из-за того, что sd-карты были по сути медленнее, чем мой жесткий диск на ноутбуке, но тот факт, что разбор XML-файлов (не связанный с IO) длился так долго, кажется, указывает на проблемы с обработкой.
Предложения/критика приветствуются.
Можете ли вы сохранить данные в чем-то более удобном, чем xml? Как насчет рассола или даже json? – Muposat
Я подумал об этом, но мой базовый источник данных должен быть xml по старым причинам. В настоящее время я размышляю над кешем (вероятно, маринованным), который будет использоваться при запуске, который обновляется после того, как поток чтения данных найдет разницу. Это только толкает проблему позже, хотя ... –
Посмотрите, можете ли вы получить библиотеку lxml, она скомпилирована и должна быть намного быстрее. Я определенно буду кэшировать все, что смогу, как рассол, даже если это сократит время запуска всего на секунду. – Muposat