关于cache

hmsuccess 2008-10-26 09:21:12
现在,我的程序在解析xml文件(比较大)以后,想将其数据保存在内存中,由于内存有限,
我想能不能将其保存在硬盘上,从硬盘上读取数据,然后经处理后只有结果放在内存中,
但是I/O访问很消耗时间,有没有什么办法,使用cache技术在硬盘上模拟内存中的数据,
已达到告高速读取数据。
这个问题弄得我不能测试大数据文件,谢谢
...全文
228 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crazy_hand 2008-10-30
  • 打赏
  • 举报
回复
学习!


----------------------------------------------------------------------------------------------------------------------
传说回贴会得到奖励!!!

每天例行工事。。
雁过留声,人过留名。。。。
赚点分,留着以后问问题用。。。
顺便顶下贴。。。

CSDN回贴专用。。

Walker-cheng 2008-10-27
  • 打赏
  • 举报
回复
文件映射
maplele20 2008-10-27
  • 打赏
  • 举报
回复
mark
hmsuccess 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 redleaves 的回复:]
内存映射文件对I/O的影响并不是那么大吧...它只是相当于做了一个足够大的读写缓冲,只不过是OS来完成的而已.
它只是对要频繁读写的内容有优化,对于楼主这个问题来说,似乎不能从根本上解决问题.而且在Win32下,最大只能映射1G的文件.再大就不行了,只能不停的切换映射区域.
如果楼主只是想做XML的转换或类似的顺序操作,那么就没有必要解析出DOM树,直接用SAX来读XML即可.又方便,又不占内存.I/O的问题可以通过异步I/O或完成端口来解决…
[/Quote]
我就用的是sax来解析xml文件的,但是我要构造一个内部数据集,这个数据集中有很多信息。
我用10m的xml文件测试,占用的内存是188m内存,
program2050 2008-10-27
  • 打赏
  • 举报
回复
路过学习。
redleaves 2008-10-27
  • 打赏
  • 举报
回复
上面关于内存映射大小的问题再说细致一点.
在95/98/ME下,只能是1G减去已经使用的虚拟内存大小.当然,还受剩下的虚拟内存中最大连续地址的大小的限制.
在NT/XP系统上,是2G一去已经使用虚拟内在的大小.(同上的限制)

不过通常也就是1G左右的大小.
redleaves 2008-10-27
  • 打赏
  • 举报
回复
内存映射文件对I/O的影响并不是那么大吧...它只是相当于做了一个足够大的读写缓冲,只不过是OS来完成的而已.
它只是对要频繁读写的内容有优化,对于楼主这个问题来说,似乎不能从根本上解决问题.而且在Win32下,最大只能映射1G的文件.再大就不行了,只能不停的切换映射区域.
如果楼主只是想做XML的转换或类似的顺序操作,那么就没有必要解析出DOM树,直接用SAX来读XML即可.又方便,又不占内存.I/O的问题可以通过异步I/O或完成端口来解决(其实自己做个缓冲也应该足够了,当然你喜欢的话用内存映射文件也可以).
如果非要有DOM树而文件又很大,那我还是建议不要直接用DOM,可以自己做个压缩的DOM树,只记录节点在文件中的位置,用SAX来解析并构造这个树.如果你还要支持修改,那也比较方便,只要做一套PATCH机制,把所有的修改内容记录下来,放到另一个文件里,然后在保存的时候合并一下就可以了(有点类似于VIM).这种方式应该可以应付几十G的XML了.
如果文件还要大,那楼主只能自己做内存分页机制了....
或者直接点,换个64位的系统,搞64位的程序...
hmsuccess 2008-10-27
  • 打赏
  • 举报
回复
使用文件内存映射有没有什么限制,如文件大小限制(我想应该不可能超过2g吧)
zhuwanglove 2008-10-27
  • 打赏
  • 举报
回复
hmsuccess 2008-10-27
  • 打赏
  • 举报
回复
这样,我重新开一贴,
taodm 2008-10-27
  • 打赏
  • 举报
回复
500M的xml文件,那解开后岂不要50*188 M = 9G?这时候你早该使用大型数据库了。
hmsuccess 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 taodm 的回复:]
10M的文件还大?
[/Quote]
同时,我只是拿10m的文件进行测试,我实际要用的xml文件大概500m左右
hmsuccess 2008-10-27
  • 打赏
  • 举报
回复
不是说10m文件解析成188m了,而是我在解析xml文件过程中,构建了一个关于xml文件中每一个word(对于文本进行分割)的倒排表,
taodm 2008-10-27
  • 打赏
  • 举报
回复
10M的文件还大?
redleaves 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hmsuccess 的回复:]
我就用的是sax来解析xml文件的,但是我要构造一个内部数据集,这个数据集中有很多信息。
我用10m的xml文件测试,占用的内存是188m内存,
[/Quote]
楼主,XML本身就是很冗余的了,如果你把10MB的XML解析成188MB...那我也只能是PFPF.建议你还是再检查一下数据结构的设计.
overbai 2008-10-27
  • 打赏
  • 举报
回复
mark
hmsuccess 2008-10-26
  • 打赏
  • 举报
回复
谢谢各位,我先看看baihacker给的
明天给大家加分
sailing0123 2008-10-26
  • 打赏
  • 举报
回复
对!
内存映射!
visame 2008-10-26
  • 打赏
  • 举报
回复
VC++中使用内存映射文件处理大文件
帅得不敢出门 2008-10-26
  • 打赏
  • 举报
回复
mark
加载更多回复(6)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧