论坛首页 Java企业应用论坛

“导出excel”压力测试多并发引起的多线程冲突问题

浏览 15381 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-29  
linenlin01 写道
ddkk 写道
linenlin01 写道
每个Export new 一个 TestExcelExport 对象!!!如果出现OOM,你得考虑换一个写Excel的方式,拒绝POI,拒绝JXL。用文件流来写,避免创建太多对象,导致OOM。

POI,JXL这种都是每个CELL一个OBJECT,很多字节的
当初也用过以二进制流写成BIFF格式,网上有个例子,还有个BUG,改了一个 << 操作的地方才可以的
但是发现用EXCEL 2003还是2007打开后,不能修改,格式也不好控制

LZ试下BIRD-X



其实我更喜欢直接写出html文本流,然后加一个xls扩展名:)

这个太假,我都不说了
0 请登录后投票
   发表时间:2011-10-29  
guanlicome 写道
晕,用fork() / join()啊。
大数据量excel导出,并发不是问题。
容易内存不足才是真正的问题。

以下是公司内部文档。

SQL部分
Mysqlで大量データ(10w件ぐらい)をselectしたら、「java.sql.SQLException: something wrong caused by java.lang.OutOfMemoryError: Java heap space」が発生します。
解決方法
SQL部分は改ページの方式で検索を行います。10000行/回で、Loop処理にします。
検索際、リターン値が (List<DataMap>)タイプです。その際、「at java.util.HashMap.newValueIterator(HashMap.java:843)」例外が起こします。
1.解決方法:arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
                  从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。http://forums.sun.com/thread.jspa?threadID=5245397
2.解決方法:不制作一个大数组,根据查询的结果来实现业务处理逻辑。

POI部分
POI在创建cell的时候消耗了大量的内存,没有及时回收。
1.解決方法:多调用flush(),但对于nW件的效果不明显。
2.解決方法: http://www.docjar.org/html/api/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java.html
                  a. create a template workbook, create sheets and global objects such as cell styles, number formats, etc.
                  b. create an application that streams data in a text file.(Writer fw = new OutputStreamWriter(new FileOutputStream(tmp), "UTF8"); )
                  c. Substitute the sheet in the template with the generated data.


模板和数据怎么应用POI融合??
0 请登录后投票
   发表时间:2011-10-30   最后修改:2011-10-30
有个类叫ThreadLocal
全局变量改成与当前线程绑定,你那个类还是可以用单实例。
0 请登录后投票
   发表时间:2011-10-30  
zean 写道
有个类叫ThreadLocal
全局变量改成与当前线程绑定,你那个类还是可以用单实例。


嗯,抽空测试下看看
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics