社区
C++ 语言
帖子详情
关于cache
hmsuccess
2008-10-26 09:21:12
现在,我的程序在解析xml文件(比较大)以后,想将其数据保存在内存中,由于内存有限,
我想能不能将其保存在硬盘上,从硬盘上读取数据,然后经处理后只有结果放在内存中,
但是I/O访问很消耗时间,有没有什么办法,使用cache技术在硬盘上模拟内存中的数据,
已达到告高速读取数据。
这个问题弄得我不能测试大数据文件,谢谢
...全文
228
26
打赏
收藏
关于cache
现在,我的程序在解析xml文件(比较大)以后,想将其数据保存在内存中,由于内存有限, 我想能不能将其保存在硬盘上,从硬盘上读取数据,然后经处理后只有结果放在内存中, 但是I/O访问很消耗时间,有没有什么办法,使用cache技术在硬盘上模拟内存中的数据, 已达到告高速读取数据。 这个问题弄得我不能测试大数据文件,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
【Armv8/Armv9架构】-
Cache
专题
2、掌握
cache
核心知识点,包含但不限于:
cache
架构知识、
cache
层级关系、
cache
组织形式、
cache
查询过程、
cache
缓存策略、
cache
snoop机制、MESI协议、硬件自动维护的缓存一致性、软件手动维护的缓存一致性、软件...
个人计算机中的
cache
,有一个关于
cache
的问题,想问问高手.这是一个软考模拟题:一般来说,
Cache
的功能( 全部由硬件实现 ).某32位计算机的
Cache
容量为16KB,
Cache
块的大小为1...
有一个关于
cache
的问题,想问问高手.这是一个软考模拟题:一般来说,
Cache
的功能( 全部由硬件实现 ).某32位计算机的
Cache
容量为16KB,
Cache
块的大小为16B,若主存与
Cache
的地址映射采用直接映射方式,则主存地址为1234...
关于
Cache
的计算
关于
Cache
的计算
关于
Cache
容量的一些概念和计算
关于
Cache
的一些个人模糊概念梳理
关于
cache
和write buffer
1. 关于
cache
和write buffer
cache
和write buffer都是内置于CPU内部的一小段高速存储器,
cache
中保存着最近一段时间被CPU使用过的内存数据,而write buffer则是用来应对内存的写操作的,将原本要写向内存的数据暂写...
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章