当前位置:编程学习 > JAVA >>

关于poi 读excel 速度的问题

我在读一个2.3M左右的2007版 excel文件时 往数据库里插数据
每次都用上10多分钟
可是我把这个文件中的东西原样复制到新建的2007版的excel中
却几乎是几秒钟的事

有高手来指点一下怎么回事吗 --------------------编程问答-------------------- 数据库有事务管理,消耗资源,不过你这10分钟也太慢了。

你可以试下每100条数据提交一次事务 --------------------编程问答-------------------- 这个跟服务器内存有关吧,程序读取的时候由于这个限制所以很慢,但是手动复制占用的是电脑内存所以快些。。 --------------------编程问答-------------------- 是不是循环里有数据处理? --------------------编程问答-------------------- 批处理提交 以100为单位 --------------------编程问答-------------------- 如果你没有用批处理当然会很慢,数据库操作时很消耗资源的。 --------------------编程问答--------------------
引用 2 楼 ch656409110 的回复:
这个跟服务器内存有关吧,程序读取的时候由于这个限制所以很慢,但是手动复制占用的是电脑内存所以快些。。

我的问题是手动复制到新建excel中 还是用poi读 速度前后不一样  --------------------编程问答--------------------
引用 4 楼 careers1111 的回复:
批处理提交 以100为单位

问题是复制到新的excel还是用poi读的 
速度怎么就差了那么多  --------------------编程问答-------------------- 我以前的工作就有一项是利用poi生成excel报表,我们是电商,所以报表也都是很大的。
首先个人感觉excel有上限,大约是10M左右,超过这个大小基本上就跑不动了。。。
另外excel分xls和xlsx两种后缀格式的,
xlsx的要更精简,同样大小xlsx存储的信息为xls的2倍多,但是xlsx的不支持poi写入。
楼主说的10分钟是不可能的,真那样的话那不是跑10分钟,而且引起高负载导致虚拟机停滞了。
读excel很快,但是楼主那10多分钟会不会往数据库存的时候浪费太多时间?
我以前测试过,2G内存,2.4主频单核,xls格式的
读30列,9000行的数据,大约是6秒左右。
写入大约是4秒左右
--------------------编程问答-------------------- 批量读取,批量提交,减少交互次数 --------------------编程问答-------------------- 用jxl呢? --------------------编程问答-------------------- 应该没用事物控制批量处理? --------------------编程问答-------------------- 亲,代码都没贴上来,也没说你写代码的思路。怎么帮你解决 --------------------编程问答--------------------
引用 8 楼 AA5279AA 的回复:
我以前的工作就有一项是利用poi生成excel报表,我们是电商,所以报表也都是很大的。
首先个人感觉excel有上限,大约是10M左右,超过这个大小基本上就跑不动了。。。
另外excel分xls和xlsx两种后缀格式的,
xlsx的要更精简,同样大小xlsx存储的信息为xls的2倍多,但是xlsx的不支持poi写入。
楼主说的10分钟是不可能的,真那样的话那不是跑10分钟,而且引起高负载导致虚拟机停滞了。
读excel很快,但是楼主那10多分钟会不会往数据库存的时候浪费太多时间?
我以前测试过,2G内存,2.4主频单核,xls格式的
读30列,9000行的数据,大约是6秒左右。
写入大约是4秒左右

这是写数据库的图片 我没有批量导入  是一条一条写的

原文件读的慢  数据移到新建的xlsx文件读的就瞬间的是
想不明白哪里出的问题 --------------------编程问答--------------------
引用 13 楼 oKaFeiMao12345 的回复:
Quote: 引用 8 楼 AA5279AA 的回复:

我以前的工作就有一项是利用poi生成excel报表,我们是电商,所以报表也都是很大的。
首先个人感觉excel有上限,大约是10M左右,超过这个大小基本上就跑不动了。。。
另外excel分xls和xlsx两种后缀格式的,
xlsx的要更精简,同样大小xlsx存储的信息为xls的2倍多,但是xlsx的不支持poi写入。
楼主说的10分钟是不可能的,真那样的话那不是跑10分钟,而且引起高负载导致虚拟机停滞了。
读excel很快,但是楼主那10多分钟会不会往数据库存的时候浪费太多时间?
我以前测试过,2G内存,2.4主频单核,xls格式的
读30列,9000行的数据,大约是6秒左右。
写入大约是4秒左右

这是写数据库的图片 我没有批量导入  是一条一条写的

原文件读的慢  数据移到新建的xlsx文件读的就瞬间的是
想不明白哪里出的问题

顺便说下 移到的新xlsx文件大小和原文件一样的  
可是速度却差了那么多
如果只是批量导入的问题 速度怎么会相差那么多 --------------------编程问答-------------------- 自己新建的xlsx,将数据复制过来,读取很快,说明代码没啥问题啊...原始的excel文件有鬼 --------------------编程问答--------------------
引用 楼主 oKaFeiMao12345 的回复:
我在读一个2.3M左右的2007版 excel文件时 往数据库里插数据
每次都用上10多分钟
可是我把这个文件中的东西原样复制到新建的2007版的excel中
却几乎是几秒钟的事

有高手来指点一下怎么回事吗

这恐怕是你插入数据库效率低啊 --------------------编程问答-------------------- 做下测试,看看是读的慢还是插数据库慢.把ncpd.insertByInstance这条语句注掉,看看执行时间是多少 --------------------编程问答-------------------- 至于读取慢可能是你sheet中用了筛选功能或其他,如果是简单纯文本的读入不会很慢 --------------------编程问答--------------------
引用 18 楼 zyb134506 的回复:
至于读取慢可能是你sheet中用了筛选功能或其他,如果是简单纯文本的读入不会很慢

试了下发现,我目前的情况是读取速度慢
但是不知道什么情况会影响poi读 excel的速度
--------------------编程问答-------------------- 读取EXCEL最慢的就是对EXCEL进行解析,你确认下是否后台对EXCEL进行了多次解析,最好是1次解析完将数据都放到内存中,然后再进行后续处理。 --------------------编程问答-------------------- 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。 --------------------编程问答--------------------
引用 21 楼 u010926176 的回复:
这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因 --------------------编程问答--------------------
我测试了发现读的慢的是xssf流
读的快的 我只是改了扩展名 文档还是用的hssf流
只是不知道为什么 2007版的excel比2003版的慢了这么多 --------------------编程问答-------------------- 补充下:
我的电脑没有安装excel 用的是wps 
不知道是不是2007版的xssf转换跟环境有关 --------------------编程问答--------------------
引用 22 楼 oKaFeiMao12345 的回复:
Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。 --------------------编程问答--------------------
引用 25 楼 u010926176 的回复:
Quote: 引用 22 楼 oKaFeiMao12345 的回复:

Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。

哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。 --------------------编程问答--------------------
引用 26 楼 u010926176 的回复:
Quote: 引用 25 楼 u010926176 的回复:

Quote: 引用 22 楼 oKaFeiMao12345 的回复:

Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。

哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。

现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据
--------------------编程问答-------------------- --------------------编程问答--------------------
引用 27 楼 oKaFeiMao12345 的回复:
Quote: 引用 26 楼 u010926176 的回复:

Quote: 引用 25 楼 u010926176 的回复:

Quote: 引用 22 楼 oKaFeiMao12345 的回复:

Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。

哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。

现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试试。
--------------------编程问答--------------------
引用 29 楼 u010926176 的回复:
Quote: 引用 27 楼 oKaFeiMao12345 的回复:

Quote: 引用 26 楼 u010926176 的回复:

Quote: 引用 25 楼 u010926176 的回复:

Quote: 引用 22 楼 oKaFeiMao12345 的回复:

Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。

哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。

现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试
试。

好像是原文件格式或是开了什么功能的原因;
我把原文件删的只有几十条数据 还是那么慢;
后来又新建了一个xssf格式的也是秒读的;
现在不确定的是原文件到底是什么样的原因 --------------------编程问答--------------------
引用 30 楼 oKaFeiMao12345 的回复:
Quote: 引用 29 楼 u010926176 的回复:

Quote: 引用 27 楼 oKaFeiMao12345 的回复:

Quote: 引用 26 楼 u010926176 的回复:

Quote: 引用 25 楼 u010926176 的回复:

Quote: 引用 22 楼 oKaFeiMao12345 的回复:

Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。

哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。

现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试
试。

好像是原文件格式或是开了什么功能的原因;
我把原文件删的只有几十条数据 还是那么慢;
后来又新建了一个xssf格式的也是秒读的;
现在不确定的是原文件到底是什么样的原因

有兴趣研究的我可以把这个excel传过去  探讨探讨 --------------------编程问答--------------------
引用 31 楼 oKaFeiMao12345 的回复:
Quote: 引用 30 楼 oKaFeiMao12345 的回复:

Quote: 引用 29 楼 u010926176 的回复:

Quote: 引用 27 楼 oKaFeiMao12345 的回复:

Quote: 引用 26 楼 u010926176 的回复:

Quote: 引用 25 楼 u010926176 的回复:

Quote: 引用 22 楼 oKaFeiMao12345 的回复:

Quote: 引用 21 楼 u010926176 的回复:

这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因

恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。

哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。

现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试
试。

好像是原文件格式或是开了什么功能的原因;
我把原文件删的只有几十条数据 还是那么慢;
后来又新建了一个xssf格式的也是秒读的;
现在不确定的是原文件到底是什么样的原因

有兴趣研究的我可以把这个excel传过去  探讨探讨

看看 单元格格式有特殊的吗?这个就不好找了,没遇见过Excel什么设置导致poi解析时的性能问题。你研究出来了 告诉我下哈。
--------------------编程问答--------------------
引用 8 楼 AA5279AA 的回复:
我以前的工作就有一项是利用poi生成excel报表,我们是电商,所以报表也都是很大的。
首先个人感觉excel有上限,大约是10M左右,超过这个大小基本上就跑不动了。。。
另外excel分xls和xlsx两种后缀格式的,
xlsx的要更精简,同样大小xlsx存储的信息为xls的2倍多,但是xlsx的不支持poi写入。
楼主说的10分钟是不可能的,真那样的话那不是跑10分钟,而且引起高负载导致虚拟机停滞了。
读excel很快,但是楼主那10多分钟会不会往数据库存的时候浪费太多时间?
我以前测试过,2G内存,2.4主频单核,xls格式的
读30列,9000行的数据,大约是6秒左右。
写入大约是4秒左右


好厉害啊 ,膜拜!
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,