java - 我可以加快 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
解决方案
如果ValueVector.MAX_BUFFER_SIZE
进程太大,我将无法分配所需的内存。例如,如果它需要以 2GB 启动,而 JVM 没有用足够的 ram 初始化(即 Xms < 2G),它会变慢,因为启动时没有足够的可用内存。
推荐阅读
- c# - Apple Pay 网页版 - 商户验证问题
- python - 如何减少matplotlib中x轴的标签数量
- classcastexception - 如何转换旧的 Java 循环并使用 Java 流将对象添加到列表中
- java - JavaFX Hibernate 崩溃:java.lang.NoClassDefFoundError:无法初始化类
- vb.net - visualbasic 无法删除目录中的 .zip 文件
- python - python中是否有异步“for”循环?
- python - 添加 .lower 后查询返回空
- azure - 如何通过邮件分享 azure devops 管道的构建失败原因?
- flutter - 文本字段打开键盘颤振脚手架
- jquery - Azure DevOps 2019 Update 1.1 的 jquery 2.2.4 易受攻击