首页 新闻 会员 周边

资源的读写性能对比

0
悬赏园豆:20 [已解决问题] 解决于 2014-09-23 17:31

在写项目或框架时,经常会遇到读取资源文件的情况,下边将会从三个方向来讨论不同的加载方式对性能(CPU、内存、磁盘IO以及网络IO)的影响:

资源文件的加载方式有:文件(File)加载、字节流加载、字符流加载、URL资源

性能指标:CPU、内存、磁盘IO、网络IO,及时性(频繁读取,一般是静态加载)

以Java为例,可以用File对象加载,InputStream加载,Reader加载等,那么用上边五种不同的加载方式,在计算机各个性能指标上有什么样的表现差异呢?

希望有深入研究过的朋友能来讨论讨论,大家一起学习学习。

----------------------割------------了----------------------

以及资源的大小边界对最优读写性能的影响,常见的场景有加载配置文件、记录日志、解析日志等等。

---------再割------------

有些回答问题的朋友让我哭笑不得

leocook的主页 leocook | 初学一级 | 园豆:184
提问于:2014-09-17 21:56
< >
分享
最佳答案
1

InputStream不过是File的一个变种吧?只不过是一个使用现成的Stream,一个还需要多一道打开程序(File->Stream)的过程而已,这点过程,怎么说呢,用InputStream,可能你用完不需要关闭,而File是需要关闭的(因为是你打开的),所以他们之间不存在IO性能对比。

Reader是一个封装了InputStream的对象,性能说起来是不如InputStream的,因为多了一层封装,当然,也或许在Reader里有一些优化的Cache机制,但作为顺序读取来说,这个Cache反而是累赘。Reader的价值应该是给应用提供了更简洁的读取Stream的手段而不是为了提升Stream的性能。

如1楼所言,IO这个东东,你是永远都绕不开的,除非是你自己写的程序里滥用和乱用Stream,否则,在Stream层次而言,你所谓的性能指标是不存在可比性,影响的因素太多,而排除这些影响因素后,三者之间,Reader无疑是最差的(当然,这个差也是极其有限的)。

收获园豆:11
519740105 | 大侠五级 |园豆:5810 | 2014-09-18 09:05
其他回答(3)
0

你在纠结些无用的事情,因为磁盘IO总的来说不是你管的,是操作系统的事情,

你能做的就是使用操作系统提供的文件系统使用资源,结论是,这些东西是文件系统决定的,不是代码能决定,

代码能决定的是怎么使用。至于怎么使用,那就是该用什么就用什么。。

吴瑞祥 | 园豆:29449 (高人七级) | 2014-09-18 08:44
0

楼主是一个负责人类探索外星项目的负责人,整个软件项目造价3万万亿,每一点微弱的性能提升可以为人类节省几千亿的经费。鉴定完成。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-09-18 10:15

我只是想多了解点而已,呵呵

支持(0) 反对(0) leocook | 园豆:184 (初学一级) | 2014-09-23 17:30
0

其实很多时候读取资源文件,都是使用异步线程的方式,然后使用回调,性能的瓶颈在线程执行时间的长久(线程数有限),所以基本上会使用线程池线程,将瓶颈交给IO线程,自己立即返回,这样能提高性能和并发量

收获园豆:9
十四区 | 园豆:225 (菜鸟二级) | 2014-09-18 15:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册