Могу ли я ускорить парсер uniVocity CSV? - PullRequest
0 голосов
/ 20 июня 2020

Я работаю над проектом, который использует парсер 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

1 Ответ

0 голосов
/ 27 августа 2020

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

...