Android: производительность GSON - PullRequest
14 голосов
/ 16 июля 2010

Я пытаюсь использовать gson для сопоставления моих объектов на эмуляторе Android.

Это было смехотворно медленно при обработке данных json около 208 КБ.У меня нет никаких иерархий в моем json.

После того как объектное сопоставление выполнено, я вижу, что gson создал около 500 записей.

На андроиде уходит более 3 минутэмулятор для отображения входных данных 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);

Ответы [ 5 ]

5 голосов
/ 16 июля 2010

Я видел подобные вопросы раньше, и общее мнение таково: Джексон намного быстрее, чем Гсон. Смотрите следующие ссылки для получения дополнительной информации:

Вот тот, который конкретно обсуждает Android: http://ubikapps.net/?p=525

4 голосов
/ 26 апреля 2011

Вы пробовали смешивать потоковый парсер GSON с объектом Gson? http://sites.google.com/site/gson/streaming (ищите пример смешанного чтения).

Этот подход может помочь, так как Gson читает все дерево разбора, а затем воздействует на него. При большом списке массивов чтение во всех элементах и ​​попытка синтаксического анализа могут привести к большой перестановке памяти (или перебоям). Этот подход будет читать по одному элементу за раз.

Надеюсь, это поможет.

2 голосов
/ 16 февраля 2011

Вы, вероятно, получите лучшую производительность, если вы обернете InputStream в BufferedInputStream с хорошим большим буфером ...

3 минуты безумно. Я редко запускаю эмулятор, но у меня есть приложение с активом JSON размером ~ 1,1 МБ, для загрузки и обработки которого требуется около 5 секунд.

(что еще слишком долго, но все же).

1 голос
/ 20 февраля 2013

Я обнаружил, что могу значительно ускорить работу gson.fromJSON, не моделируя все элементы в JSON, которые мне не нужны.GSON с радостью заполнит только то, что указано в ваших классах ответов.

0 голосов
/ 03 сентября 2016

Я обнаружил, что СОЗДАНИЕ экземпляра Gson - это очень дорогая операция, как с точки зрения использования ЦП, так и выделения памяти.

Поскольку экземпляры Gson являются поточно-ориентированными, создание и повторное использование одного статического экземпляра окупается, особенно если вы часто сериализуете / десериализуетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...