1
anyele 2017-07-14 19:17:51 +08:00 via Android 1
1 小时? 我试过 Excel to txt,一行一行写,5 万行的 Excel 只需要 4-5 秒
|
2
tanranran 2017-07-14 19:20:28 +08:00 1
list 转 string,然后用回车分割.然后一次性写到 txt 文件里.
|
3
ihuotui 2017-07-14 19:30:35 +08:00 via iPhone 1
nio
|
4
af463419014 2017-07-14 19:47:49 +08:00 1
nio+1
|
5
hcymk2 2017-07-14 19:59:29 +08:00 1
java youclass > res.txt
看下要花多长时间。 |
6
Accldent 2017-07-14 20:39:05 +08:00 1
先用 profiler 分析下大部分时间花在了哪儿再决定怎么优化,但是这种场景下用 NIO 得不到质的提升,只是从数据流变成数据块
|
7
hand515 2017-07-14 21:35:12 +08:00 1
看看磁盘的 IO 性能先
|
8
hyperdak 2017-07-14 21:57:06 +08:00 1
List<String> list = Lists.newArrayList();
FileUtils.writeLines(new File("e:\\abcdddd.txt"), "utf-8", list); 啷个阔能一小时嘛? |
10
FreeFd 2017-07-14 22:32:06 +08:00 via Android 1
其实多线程写也可以呀,类似于多线程下载的技术
|
12
iEverX 2017-07-15 00:29:42 +08:00 1
只是第一行 10ms 吧,之后是顺序写,不可能一直 10ms
|
13
autulin 2017-07-15 02:26:16 +08:00 via Android 1
nio+内存映射
|
15
DCjanus 2017-07-15 03:58:18 +08:00 1
持续写入,性能瓶颈主要在磁盘 IO。
猜测其中可优化点: 1. 使用 buffer 减少磁盘 IO 次数 2. 一次性创建所需大小的文件后再写入,在大多数文件系统上可以获得更好的效率 详细解释: 1. 磁盘每次写入,不管是写入 1 个字节还是 1K 字节,只要在一定范围内,时间相差不多,所以尽量攒够一波再写入 2. 每次都是追加文件尾,文件系统一开始并不知道你的文件大小,一开始先创建一个恰当大小的文件,文件系统更容易做出优化,不同的文件系统实现不同,此处略去。 相关参考: 1. 创建特定大小文件: http://jk-t.iteye.com/blog/1930414 2. 使用 BufferedWriter 写文件 |
16
Valyrian 2017-07-15 04:11:11 +08:00 1
明显是没 buffer 吧。。
|
18
ihuotui 2017-07-15 18:33:23 +08:00 via iPhone
加上 4k 才刷盘,这样比较好,或者更大块,硬盘都是大块速度快,小文件慢
|