Подтвердить что ты не робот

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);
4b9b3361

Ответ 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 являются потокобезопасными, вы можете построить и повторно использовать один статический экземпляр, особенно если вы часто выполняете сериализацию/десериализацию.