Android: gson performance
Я пытаюсь использовать gson для сопоставления объектов на эмуляторе Android.
Это было смешно медленно при обработке json-данных около 208 кб. У меня нет иерархий в моем json.
После сопоставления объектов я вижу, что gson создал около 500 записей.
Это занимает 3 минуты на эмуляторе Android для отображения ввода json.
Я аннотировал мою сущность, которая содержит строки и пару поплавков.
Я что-то пропустил?
Любые идеи, лучшие практики могут помочь.
Есть ли способ быстрого отображения объектов json-данных?
URL myURL = new URL(url);
/* Open a connection to that URL. */
URLConnection ucon = myURL.openConnection();
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
InputStreamReader reader = new InputStreamReader(is);
long tickCount = System.currentTimeMillis();
Policy[] policies = new Gson().fromJson(reader, Policy[].class);
long endCount = System.currentTimeMillis() - tickCount;
Log.d("Time to pull policies in milliseconds", "" + endCount);
Ответы
Ответ 1
Я видел такие вопросы, как это было раньше, и общий консенсус в том, что Jackson намного быстрее, чем Gson. Для получения дополнительной информации см. Следующие ссылки:
Вот тот, который специально обсуждает Android: http://ubikapps.net/?p=525
Ответ 2
Вы пробовали смешивать потоковый парсер GSON с объектом Gson? http://sites.google.com/site/gson/streaming (найдите пример смешанного чтения).
Этот подход может помочь, поскольку Gson читает во всем дереве синтаксического анализа и затем действует на него. С большим списком массивов, чтение во всех элементах и попытка разбора могут вызвать множество обменов памяти (или обмоток). Этот подход будет считываться по одному элементу за раз.
Надеюсь, что это поможет.
Ответ 3
Вероятно, вы получите лучшую производительность, если вы завернете этот InputStream
в BufferedInputStream
с хорошим большим буфером...
3 минуты безумны. Я редко запускаю эмулятор, но у меня есть приложение с активацией JSON размером 1,1 МБ и занимает около 5 секунд для загрузки и обработки аппаратного обеспечения.
(который еще слишком длинный, но все же).
Ответ 4
Я обнаружил, что могу значительно ускорить gson.fromJSON, не моделируя все элементы в JSON, которые мне не понадобятся. GSON будет радостно заполнять только то, что указано в ваших классах ответов.
Ответ 5
Я обнаружил, что СОЗДАНИЕ экземпляра Gson - очень дорогостоящая операция, как с точки зрения используемого процессора, так и с выделенной памятью.
Так как экземпляры Gson являются потокобезопасными, вы можете построить и повторно использовать один статический экземпляр, особенно если вы часто выполняете сериализацию/десериализацию.