java 板


LINE

有理, 不过 by this case... 先说一下关於 Apache POI, 如果没有自己 handle Streaming Usermodel,那它本身就非常吃记忆体, 详情请自行估狗 "Apache POI Footprint" or "Apache POI OutOfMemory", 最近是有改善但有限。 所以真的怕大档吃 memory 的话,其实就... pipe 或什麽其它的 stream 让你 GG 之前, Apache POI 会先让你 GG XDD。 写一个 byte 读一个 byte 其实也有点...奇怪? 因为用 Apache POI 我没会错意的话, 应该是要靠它拿 cell 里的值然後自己加逗号, 特地对後来建出的字串一个一个 byte 处理... 不知道该怎麽说 "0rz 前面 Apache POI 应该已经吃掉 比你把资料全读出来组好的 String 还多 n 倍的 memory 了, 这里真的要抢回 memory 的话尽快把资料读完, 让 HSSF/XSSF workbook 设为 null 给 GC 最有效, 不然都有种 "省小条、开大条" 的感觉 @@"。 至於简单,用 pipe input/output 互接看起来是有一点麻烦, 不过写档也一样要读出资料、加逗号再存成 CSV, 那或许可以考虑用简单一点的 PrintStream, (是说它也可以写档就是) 只要一直读出来 append... append..., 读完再拿 byte array 转 input stream 就好, 这样也是都在 memory 里做掉,不过还是很简单。 ※ 引述《popcorny (毕业了..@@")》之铭言: : ※ 引述《popcorny (毕业了..@@")》之铭言: : : ㄜ.. 我说错了 : : 资源不会浪费 : : 应该说你一个byte一个byte读会很花时间 : : 要不然比较可以的做法是开两个thread. : : 一个写pipe 一个读pipe. : : 这样应该是最完美也最不占资源的做法 : : 但我觉得用temp file是简单又有效率的做法 : : 一次把全部csv写到temp file : : 再全部一次从temp file读回来 : : 简单易懂 : : -- : : → lovdkkkk:可是写档读档很... 04/24 21:59 : : 推 willy69wu31:我觉得写档读档这样吃硬碟好像更花时间@@ 04/24 22:47 : : 推 willy69wu31:不过还是感谢你的回应 04/24 22:49 : : → danny8376:实际上完全不花时间 因为OS会帮你做好cache 04/25 01:09 : 读写档比memory慢,这个是绝对的 : 但是回到原po说的 : 他想要写一个byte读一个byte : 然而producer是apache poi 而consumer是已经写好的程式 : 所以要这样"Flow Control"应该很难写吧... : 如果要我写可能选三个方法 : 1. 开两个thread. 中间开pipe : 两边一起跑,这是最完美的做法。 : 就跟unix like的command line pipe一样的行为 : 2. producer写到ByteArrayOutputStream : 写完把bytes拿出来放到ByteArrayInputStream去读 : 免开thread. 也够快.. 但是缺点就是档案大吃太多memory : 3. producer写到temp file : consumer从temp file读 : 免开thread.. 也不怕档案大 : 但选择方案的时候我会有三个考量点要考量 : a. 效率 : b. 最大Memory使用量 (memory footprint) : c. 程式码简单,流程单纯。 : 如果你的效能是你很大的考量。 : 而且你的档案有可能会很大。 : 那我建议你选1的方案。也算是大多数情况最好的解。 : 唯一的缺点就是流程复杂点,程式码比较难懂。 : 退而求其次,如果今天你已经确定资料量不会太大 : 也许2是最好解。简单,快速,易懂。 : 如果效能不会是太大考量。 : 也许你的程式你久久才跑一次这段程式 : 而每次跑也只是0.1秒跟0.001秒的差别。 : 那写档会是最简单,不吃memory的做法 : 写程式本来很多都是trade off : 你必须要有能力可以评估 : 虽然效能差距1000倍 : 但是你的程式在这边本来就不占0.01%的时间 : 不是performance bottleneck : 或是你的程式根本就久久才用一次这段code : 那我们当然选择一个易懂不易出错很容易maintain的版本 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.187.99
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1398421115.A.BD8.html
1F:→ lovdkkkk:再想了一下, 直接用 StringBuilder 然後转 Stream 也行 04/25 21:07







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP