Могу ли я ускорить парсер uniVocity CSV?

Я работаю над проектом, который использует парсер uniVocity CSV для чтения InputStream, содержащего данные CSV. В целом анализатор CSV работает отлично, однако есть одна строка, которая кажется медленной.

Когда я вызываю метод beginParsing(), кажется, что выполнение этого метода в моем модульном тесте занимает почти 4 секунды. Есть ли способ ускорить это? Спасибо!

this.csvSettings = new CsvParserSettings();
csvSettings.setLineSeparatorDetectionEnabled(true);
RowListProcessor rowProcessor = new RowListProcessor();
csvSettings.setProcessor(rowProcessor);
csvSettings.setMaxCharsPerColumn(ValueVector.MAX_BUFFER_SIZE);
...
this.csvReader = new CsvParser(csvSettings);
logger.debug("Time to open CSV Parser: {} milliseconds", timer.elapsed().getNano() / 100000);

// This line is slow
csvReader.beginParsing(searchResults, "utf-8");
logger.debug("Time to open input stream: {} milliseconds", timer.elapsed().getNano() / 100000);

Вот результаты:

19:35:23.475 [2112b444-e4af-cf7b-5006-7a79bbdae8dc:frag:0:0] DEBUG - Time to open CSV Parser: 262 milliseconds
19:35:24.912 [2112b444-e4af-cf7b-5006-7a79bbdae8dc:frag:0:0] DEBUG - Time to open input stream: 4634 milliseconds
19:35:24.921 [2112b444-e4af-cf7b-5006-7a79bbdae8dc:frag:0:0] DEBUG - Time to build schmea: 4727 milliseconds


person cgivre    schedule 19.06.2020    source источник


Ответы (1)


Если ValueVector.MAX_BUFFER_SIZE слишком велико, у процесса могут возникнуть проблемы с выделением необходимой памяти. Например, если ему нужно запуститься с 2 ГБ, а JVM инициализирована с недостаточным объемом оперативной памяти (например, Xms ‹ 2 ГБ), она будет работать медленнее, потому что при запуске недостаточно памяти.

person Jeronimo Backes    schedule 27.08.2020