В дополнение к существующим хорошим предложениям есть одна довольно простая вещь: использовать API курсора (XMLStreamReader), а не API событий.Event API добавляет 30-50% накладных расходов без (только IMO), что значительно упрощает обработку.На самом деле, если вам нужно удобство, я бы рекомендовал вместо этого использовать StaxMate ;он построен на основе Cursor API без значительных накладных расходов (не более 5-10% по сравнению с рукописным кодом).
Теперь: я полагаю, что вы провели базовую оптимизацию с Woodstox;но если нет, ознакомьтесь с « 3 простых правил быстрой обработки XML с использованием Stax ».В частности, вам абсолютно необходимо:
- Убедитесь, что вы создаете экземпляры XMLInputFactory и XMLOutputFactory только один раз
- Закройте устройства чтения и записи, чтобы гарантировать, что переработка буфера (и другое полезное повторное использование) работает как положено.1012 *
Причина, о которой я упоминаю, заключается в том, что, хотя они не имеют никакого функционального различия (код работает должным образом), они могут иметь большое значение для производительности;хотя в большей степени при обработке небольших файлов.
Запуск нескольких экземпляров также имеет смысл;хотя обычно с не более 1 потока на ядро.Однако вы получите выгоду только в том случае, если ваш ввод / вывод для хранения данных поддерживает такие скорости;если диск является узким местом, это не поможет, а в некоторых случаях может повредить (если диск стремится конкурировать).Но попробовать стоит.