首页
社区
课程
招聘
[已解决] [悬赏]基于Windows的文件内存映射关闭耗时的大问题! 5.00雪花
2017-5-10 15:32 3011

[已解决] [悬赏]基于Windows的文件内存映射关闭耗时的大问题! 5.00雪花

2017-5-10 15:32
3011

处理一个大文件,大概1G及以上,使用windows api进行文件内存映射,写入数据后关闭映射,结果关闭时间需要5秒左右,气死人!

我的做法是:创建一个文件,得到一个handle,名为h_file, 使用这个h_file创建一个映射对象,得到另一个handle,名为h_map;
写入数据后,调整文件长度(调用SetFilePointer和SetEndOfFile),然后关闭h_map(瞬间关闭),最后关闭h_file(耗时5秒左右),这到底是怎么一回事呢?

A:如果我创建完成h_map之后就立即关闭h_file,这时候就瞬间完成,但是无法调整文件长度。如果在A的情况下,关闭h_map之后再重新创建文件句柄,然后再去调整文件长度后进行关闭,但这样的话,创建文件句柄又会花费平均5秒左右的时间,真是见鬼了!

请问大侠,我如此才能实现调整文件长度后瞬间关闭所有handle呢?


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
打赏
分享
最新回复 (6)
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yezhulove 2017-5-10 18:14
2
0
这有什么见鬼的,你换个SSD,速度就上去了,写1G文件,需要时间啊。你硬盘又没那么快。
雪    币: 49
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
土豆粉 2017-5-10 18:30
3
0
加SSD,在搞个阵列。哈哈。速度呼呼的快。
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
IDGHOST 2017-5-10 22:00
4
0
如果所在卷是NTFS格式,且单次写入数据量少的话,试试为文件设置标志位FSCTL_SET_SPARSE
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
哈里菠菜dhb 2017-5-10 22:37
5
0
哈哈,都是高手啊
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nodouble 2017-5-11 14:15
6
0
IDGHOST 如果所在卷是NTFS格式,且单次写入数据量少的话,试试为文件设置标志位FSCTL_SET_SPARSE
如果不调整文件长度的话,关闭就瞬间完成,所以我感觉不是写入数据量大小的问题
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
IDGHOST 2017-5-11 18:28
7
0
因为在关闭时候总还是要把数据写回去,SetFilePointer也不例外(占硬盘空间)。
我所理解的意思是:1.1G的文件只写数据,卡。2.小文件只调整到1G,卡。
那么很简单,①用非缓存打开②调整不同文件大小比较等待时间③追踪那段时间硬盘的写入量。
至于调整大小卡的原因当然也有可能是磁盘碎片的缘故。
游客
登录 | 注册 方可回帖
返回