2010-07-16 3 views
14

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

Было смешно медленно при обработке данных 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); 
+0

Пожалуйста, не используйте эмулятор Android для измерения производительности. Модель производительности значительно отличается от модели реального устройства. –

ответ

5

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

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

2

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

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

(Который еще слишком длинный, но все же).

+0

Я борюсь с той же проблемой. У вас есть онлайн-учебник, который описывает ваше решение? –

4

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

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

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

+2

+1 - подход DOM на GSON быстро реализуется, но очень медленно обрабатывает большие ответы. Я использую его для прототипов, а затем оптимизирую до метода Streaming для производства. Я думаю, что больше людей должны понимать, что GSON не так медленна, как вы ее используете (не говоря уже о том, что это самый быстрый, просто многие не используют потоковое вещание) –

1

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

0

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

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