Подсказки по Производительности Сериализации объекта Java

Если вы получаете 404, возможно, вы используете версию API, которая не поддерживает отслеживание отгрузки: посмотрите документы, в которых написано Версия 1.5+ поддерживает API REST . Когда вы создаете wcapi, на какую версию вы указали? Должно выглядеть примерно так (из документов на https://pypi.org/project/WooCommerce/ ):

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    version="wc/v3"
)

5
задан Mario Ortegón 2 March 2009 в 13:40
поделиться

8 ответов

Одна оптимизация настраивает дескрипторы класса, так, чтобы Вы сохранили дескрипторы класса в другой базе данных и в объектном потоке, который Вы только отсылаете к ним идентификатором. Это уменьшает пространство, необходимое сериализированным данным. Посмотрите, например, как в одном проекте классы SerialUtil и ClassesTable делают это.

При создании классов Externalizable вместо сериализуемого может дать некоторые выигрыши в производительности. Оборотная сторона - то, что требуется большой физический труд.

Затем существуют другие библиотеки сериализации, например, jserial, который может дать лучшую производительность, чем сериализация Java по умолчанию. Кроме того, если граф объектов не включает циклы, то он может быть сериализирован немного быстрее, потому что сериализатор не должен отслеживать объекты, которые он видел (см., "Как он работает?" в FAQ jserial).

6
ответ дан 18 December 2019 в 06:04
поделиться

Я рекомендовал бы Вам реализовать пользовательский writeObject () и readObject () методы. Таким образом Вы будете способный устранять запись chidren узлы для каждого узла в дереве. При использовании сериализации по умолчанию каждый узел будет сериализирован со всем, что это - дети.

Например, writeObject () Древовидного класса должен выполнить итерации через все узлы древовидного и только записать данные узлов (без Узлов сами) с некоторыми маркерами, который определяет древовидный уровень.

Можно посмотреть на LinkedList, чтобы видеть, как это методы реализовало там. Это использует тот же подход для предотвращения пишущих предыдущих и следующих записей для каждого однократного въезда.

4
ответ дан 18 December 2019 в 06:04
поделиться

Не забывайте использовать 'переходное' ключевое слово, например, переменные, которые не должны быть сериализированы. Это дает Вам повышение производительности, потому что Вы больше не читаете/пишете ненужные данные.

11
ответ дан 18 December 2019 в 06:04
поделиться

Чтобы избежать необходимости писать Ваш собственный код сериализации, дайте Google Protocol Buffers попытку. Согласно их сайту:

Буферы протокола являются нейтральным в отношении языка, независимым от платформы, расширяемым механизмом Google для сериализации структурированных данных – думают XML, но меньший, быстрее, и более простой. Вы определяете, как Вы хотите, чтобы Ваши данные были структурированы однажды, затем можно использовать специальный сгенерированный исходный код, чтобы легко записать и считать структурированные данные в и от множества потоков данных и использования множества языков – Java, C++ или Python

Я не использовал его, но услышал много положительных моментов о нем. Плюс, я должен поддержать некоторый пользовательский код сериализации, и это может быть абсолютный кошмар, чтобы сделать (уже не говоря о разыскивании ошибок), так получение, кто-то еще, чтобы сделать это для Вас всегда является Хорошей Вещью.

4
ответ дан 18 December 2019 в 06:04
поделиться

Вы попытались сжать поток (GZIPOutputStream)?

1
ответ дан 18 December 2019 в 06:04
поделиться

Это - то, как я сделал бы это, сформировал бы вершину моей головы

Сериализация

  1. Сериализируйте каждый объект индивидуально
  2. Присвойте каждому объекту уникальный ключ
  3. Когда объект будет содержать ссылку на другой объект, поместите уникальный ключ для того объекта в месте объектов в сериализации. (Я использовал бы UUID, преобразованный в двоичный файл),
  4. Сохраните каждый объект в файл/базу данных/устройство хранения данных с помощью уникального ключа

Несериализация

  1. Запустите формируют произвольный объект (обычно корень, который я подозреваю), не сериализируют его и помещают его в карту с, он - уникальный ключ как индекс, и возвратите его
  2. Когда Вы ступаете на объект, вводят поток сериализации, сначала проверяют, не сериализируется ли он уже путем поиска, это - уникальный ключ в карте и если это - просто захват это оттуда, если не помещенный ленивый прокси загрузки (который повторяет эти два шага для того объекта) вместо реального объекта, который имеет рычаги для загрузки правильного объекта, когда Вам нужен он.

Редактирование, Вы, возможно, должны были бы использовать сериализацию с двумя передачами и несериализацию, если у Вас есть циклические ссылки там, это усложняет вещи немного - но не так очень.

1
ответ дан 18 December 2019 в 06:04
поделиться

Кроме того, взгляните на XStream, библиотека для сериализации объектов к XML и назад снова.

0
ответ дан 18 December 2019 в 06:04
поделиться

Для производительности я предложил бы не использовать java.io сериализацию вообще. Вместо этого спуститесь на байтах сами.

Если Вы идете в java.io, сериализируют дерево, Вы, возможно, должны были бы удостовериться, что Ваша рекурсия не становится слишком глубокой, ни один путем выравнивания (как говорят TreeSet делает), или располагающий сериализировать самые глубокие узлы сначала (таким образом, у Вас есть обратные ссылки, а не вложенный readObject вызовы).

Я был бы удивлен, не было ли пути в Kodo для чтения всего дерева в в одном (или некоторые) идет.

0
ответ дан 18 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: