VC++中shared_ptr> MapFile大文件提示存储空间不足

HYH 2016-03-24 03:27:49
正在维护别人写的一个VC++的项目,出了点问题,原来从来没写过VC++,不知道怎么办了!
这个小项目的功能是这样的,把总共大小2.3GB的四十几个文件,按顺序写到用USB连接的设备中,因为一次可以连接多个设备,多线程同时写,所以用的下面的这个东西,查了资料是智能指针:
shared_ptr<CAtlFileMapping<>> spFileMapping

有一个函数,先检查这个智能指针中有没有当前要加的文件:
s_mapFileMapping.FindKey(fileName)

如果有就直接取出来,再写到设备中,如果没有就先加到spFileMapping中:
CAtlFile file;

hr = file.Create(pszFileName, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING);

spFileMapping.reset(new CAtlFileMapping<>());
if (!spFileMapping)
return E_OUTOFMEMORY;

hr = spFileMapping->MapFile(file);
if (FAILED(hr))
return hr;

这个软件一直用着好好的,直到最近要写的其中一个文件A变大,有2.5GB这个大!要写的文件加起来总共3.1GB。
现在一到spFileMapping->MapFile(A-file);这行,就报存储空间不足,无法处理此命令,请教各位VC高手,这个现在要怎么弄啊,我看内存并没有满,我的笔记本4G的内存,是不是这个mapfile把所有的文件都加载内存中去了,但后哪个线程要去取文件就直接到内存去取了?
如果是这样的话,要怎么弄才能防止出现储空间不足这样的情况?
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2016-03-24
  • 打赏
  • 举报
回复
首先是不是写完的文件没有及时释放 然后不需要写的文件先不要读进来 当然具体也没做过类似的需求 可能提的意见也没什么用

3,245

社区成员

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

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