首页
社区
课程
招聘
[求助]为什么File mapping比普通文件读写效率高
发表于: 2010-5-28 17:22 6677

[求助]为什么File mapping比普通文件读写效率高

2010-5-28 17:22
6677
File Mapping用的是页面文件,直接换入内存。它效率高是因为从硬盘读入内存用的是特殊的方法还是因为文件读写时有一些额外的操作?查了好久,没查到确切的答案。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 324
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
试问:读内存快还是读硬盘快?嘿嘿
2010-5-28 17:23
0
雪    币: 75
活跃值: (698)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
第一次打开文件,第一次读写操作(buffered),两者效率上没区别。普通可缓冲读写,还是要通过cachemanager建立filemapping,最后都是通过缺页异常来完成内容的读取写入。

但若是频繁的文件读写操作,filemap这种方法的优势就体现出来了。因为普通可缓冲读写cache的内容有限,而且,cache的内容很容易就被释放。频繁读写的话,它来回捣腾的次数就多了,读取写入硬盘的次数也就多了。
而filemapping就不一样,建立之后,这部分内存空间是不会被释放,最多因为物理页面不够被倒换到交换页面上,读取写入硬盘的次数明显减少。。然后效率就上去了

说错没?后面的人上
2010-5-28 19:09
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
4
看怎么用 filemap也不一定比读文件效率高.
2010-5-29 02:31
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
5
哪个教材说过File mapping快是读内存比文件快?原因根本就不是这个,MmMapViewOfSection时并不会读文件,只是创建必要的数据结构,这时如果用MmIsAddressValid去测试就会发现返回假了(说明文件根本没读进来),只有你访问到映射进来的某个内存时,产生缺页中断,这时缺页中断才会读一小部分进来,不会很多,就读你读取的那个位置以后的几百字节(数目不确定,估计和操作系统有关),速度当然快了,所以映射几个G的文件和几kb文件速度不差多少,但是都是要去读文件的……
2010-5-29 15:40
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼上正解......
2010-5-30 20:13
0
雪    币: 178
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
MmIsAddressValid是测试不到应用层无效地址的。
也测试不到分页内存的。
MmMapViewOfSection似乎也只能映射到用户态。
2010-5-31 09:53
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
效率高低其实不一定,起码相差不会很大, readfile 其实也把文件的内容加载到了cache中, 用的与文件映射相同的机制
2010-5-31 13:24
0
雪    币: 273
活跃值: (64)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
9
要是单纯的操作某一部分,我觉得用那I/O操作快一些,如果要写入大量的东西,比如添加一个节,用FILEMAP快点吧
2010-6-2 17:20
0
游客
登录 | 注册 方可回帖
返回
//