IStorage读取文件时占用内存的问题

g_feng 2008-12-17 12:47:09
我用IStorage创建的IStream读取,每次调用read函数读取不同偏移位置的数据,进程占用的内存都会增加,如果读取同一片偏移的数据,内存是不会增加的,应该是IStorage在内存里面缓存的功能,但这样在读取很大文件的时候会占用太多的内存,只有在IStorage被Release后才会释放,请问谁知道有什么办法能不使用IStorage的缓存机制,或者限制它缓存的大小。
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
g_feng 2008-12-18
  • 打赏
  • 举报
回复
jameshooo ,就是想用复合文件IStorage,这个问题当然使用复合文件时出现的问题,如果用我自己的IStream,当然不会有问题。
yjgx007,SetProcessWorkingSetSize我去试试。
但谁能解释一些我看到进程使用的内存是增长了很多,但看可以使用的物理内存还是没有变化,这个情况。
yjgx007 2008-12-18
  • 打赏
  • 举报
回复
windows的一些接口是比较怪异,通常,就算你手工释放,系统也不会马上去做,试下用SetProcessWorkingSetSize重新整理内存.
jameshooo 2008-12-17
  • 打赏
  • 举报
回复
你完全可以自己实现一个IStream来读取文件,想怎么缓冲就怎么缓冲,内存分配也由你负责。
UDX协议 2008-12-17
  • 打赏
  • 举报
回复
Remarks
The DestroyElement method deletes a substorage or stream from the current storage object. After a successful call to DestroyElement, any open instance of the destroyed element from the parent storage becomes invalid.

If a storage object is opened in transacted mode, destruction of an element requires that the call to DestroyElement be followed by a call to IStorage::Commit.
UDX协议 2008-12-17
  • 打赏
  • 举报
回复
你release你的stream就可以了。
g_feng 2008-12-17
  • 打赏
  • 举报
回复
我每次读完一次时候都需要release stream吗?这个stream本来就需要用来反复读写数据,反复的关闭打开岂不太浪费?难道没其他方法?我想自己管理缓冲机制不行吗?另外我看到进程使用的内存是增长了很多,但看可以使用的物理内存还是很多,这些使用的是虚存吗?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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