首页 > 解决方案 > 我可以加快 uniVocity CSV Parser 的速度吗?

问题描述

我正在开发一个使用 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

标签: javacsvapache-drillunivocity

解决方案


如果ValueVector.MAX_BUFFER_SIZE进程太大,我将无法分配所需的内存。例如,如果它需要以 2GB 启动,而 JVM 没有用足够的 ram 初始化(即 Xms < 2G),它会变慢,因为启动时没有足够的可用内存。


推荐阅读