社区
其它技术问题
帖子详情
用内存映射文件创建大文件并随机写满导致机子卡死的问题
linyanxin2007
2011-07-22 10:57:30
小弟创建了一个4G文件,一次256K地随机写满,所以每次用MapViewOfFile映射256K,写完后用UnmapViewOfFile释放视图,这样子循环,写到3G大小左右的时候,就会变得很慢,我查了下是卡在memcpy那里,不知是否内存耗尽的问题,希望有此经验的解答一下,顺便给个解决方法。
ps:我的机子内存4G,创建1G或2G速度都很快,只要几秒。
...全文
265
11
打赏
收藏
用内存映射文件创建大文件并随机写满导致机子卡死的问题
小弟创建了一个4G文件,一次256K地随机写满,所以每次用MapViewOfFile映射256K,写完后用UnmapViewOfFile释放视图,这样子循环,写到3G大小左右的时候,就会变得很慢,我查了下是卡在memcpy那里,不知是否内存耗尽的问题,希望有此经验的解答一下,顺便给个解决方法。 ps:我的机子内存4G,创建1G或2G速度都很快,只要几秒。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
clz0502
2013-07-01
打赏
举报
回复
那用UnmapViewOfFile,怎样使内存马上释放呢?
wuxiao0313
2012-10-13
打赏
举报
回复
memcpy确实有卡死的情况
linyanxin2007
2011-07-23
打赏
举报
回复
1
经过实践猜想,UnmapViewOfFile并没马上释放内存资源,而是交由系统把视图里的数据写回磁盘,导致了资源释放缓慢。UnmapViewOfFile就像一个异步的函数,马上返回成功,但其实是由系统来完成后续的工作,在内存申请快速而释放缓慢的情况下,内存很快就会耗尽。
欢迎拍砖和指导。
赵4老师
2011-07-22
打赏
举报
回复
读大文件,偶只用_lseeki64!
linyanxin2007
2011-07-22
打赏
举报
回复
[Quote=引用 6 楼 wzx19840423 的回复:]
char* buff = new char[piecesize];
memset(buff, 0xff, piecesize);
memcpy(pbFile,buff,piecesize);
delete[] buff;
这段问题太大,没看出buff有什么用,piecesize每次取值是多少?楼主你这结帖率我也不想多说了
[/Quote]
这段是通过写映射来写文件啊,每次写256K
强迫症专用头像
2011-07-22
打赏
举报
回复
char* buff = new char[piecesize];
memset(buff, 0xff, piecesize);
memcpy(pbFile,buff,piecesize);
delete[] buff;
这段问题太大,没看出buff有什么用,piecesize每次取值是多少?楼主你这结帖率我也不想多说了
linyanxin2007
2011-07-22
打赏
举报
回复
LARGE_INTEGER liOffset = {0};
int* iarray = new int[uiPieceNum];
RandomIntArray(iarray, uiPieceNum); //得到一个随机数序列,按该序列来写满
for (int i = 0; i < uiPieceNum; i++)
{
int index = iarray[i];
liOffset.QuadPart = index;
liOffset.QuadPart *= PIECESIZE;
//获取欲写入的字节数
piecesize = PIECESIZE; //#define PIECESIZE (256*1024)
if (index + 1 == uiPieceNum && filesize%PIECESIZE != 0)
{
//获取最后一块的大小
piecesize = (unsigned int)(filesize%PIECESIZE);
}
//创建视图并写视图
PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping,
FILE_MAP_WRITE,
(DWORD)(liOffset.HighPart),
(DWORD)(liOffset.LowPart),
piecesize);
if (NULL == pbFile)
{
cout << "MapViewOfFile error: " << GetLastError() << endl;
CloseHandle(hFileMapping);
return false;
}
char* buff = new char[piecesize];
memset(buff, 0xff, piecesize);
memcpy(pbFile,buff,piecesize);
delete[] buff;
if (!UnmapViewOfFile(pbFile))
{
cout << "UnmapViewOfFile error: " << GetLastError() << endl;
CloseHandle(hFileMapping);
return false;
}
}
CloseHandle(hFileMapping);
基本代码如上,不知道是不是资源没释放的原因
强迫症专用头像
2011-07-22
打赏
举报
回复
[Quote=引用 2 楼 babilife 的回复:]
楼主换成技术问题,保证回答的人多、
另外理论值好像也就能写到3G,剩下的要和系统抢内存了
[/Quote]
内存映射没这个限制吧,每次映射256K,使用完后释放。运行时内存应该只比256K多一点才对。
强迫症专用头像
2011-07-22
打赏
举报
回复
是不是你映射的内存没释放?你看下程序运行时任务管理器里进程的内存是不是一直在增加
至善者善之敌
2011-07-22
打赏
举报
回复
楼主换成技术问题,保证回答的人多、
另外理论值好像也就能写到3G,剩下的要和系统抢内存了
bdmh
2011-07-22
打赏
举报
回复
要看具体代码,应该是你控制的不好
(237)Vivado工程编译时间过长原因总结
(14)DDR工作效率? 第一,DDR读写效率分析 Xilinx MIG IP 核对DDR3芯片进行按地址连续存储,效率较高。但Xilinx MIG IP 核对DDR3的
随机
地址存取效率比较低。使读写效率降低的主要原因有:同Bank行切换、读写切换、IP核Bank管理方式。 第二,DDR读写效率提高; 故可采取以下方式提高DDR3带宽利用率: 1)降低读写切换的频率; 2)采用连续地址存取的方式,减少Bank和行的切换; 3)在对MIG IP 核进行配置时,用户接口地址映射方式采用“ROW_B
锐起无盘精华100问!(包括3.1,3.0版本)
1.问:锐起磁盘管理创建的时候选用稀疏
文件
会出现提示:创建磁盘映像
文件
错误,请检查
文件
路径是否 正 确!不选稀疏会提示:创建磁盘映像
文件
错误,请检查磁盘空间是否足 够! 答:1、磁盘不可写,路径不可写2、磁盘空间不够3、磁盘有坏道4、不是ntfs分区 2.问:锐起2542游戏自动更新要怎么设置? 答:服务端装好之后游 戏更新是直接有的 ,破解或者正版。然后在配置一下更...
说实话,ES 真得牛逼!只是你不会用而已~
点关注公众号,回复“1024”获取2TB学习资源!近期在公司做了一次 Elasticsearch 的分享,所以本篇主要是做一个总结,希望通过这篇文章能让读者大致了解 Elasticsearch 是做什么的以及它的使用和基本原理。生活中的数据搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结构化数据非结构化数据结构化数据:也称作行数据,是由二维表结构来逻辑表达和实...
Docker命令及使用方法
写在前面 docker操作必须在root用户或者写入了/etc/group
文件
的docker组中的用户下才能运行。 获取镜像 docker search 镜像名 搜索镜像 docker pull 用户名/镜像名 下载镜像 docker image ls 查看下载的镜像列表,只有当镜像出现在这里时才能被接下来的命令调用 参考链接 使用镜像 docker run [各种参数] 镜像名 命令,所有参数都位于镜像名之前,所有要运行的命令都位于镜像名之后 docker run mirror apt-get insta
【八股文】Redis篇
目录为什么要使用缓存Redis的优点 为什么要使用缓存 高性能 非实时变化的数据,查询mysql耗时需要300ms,存到缓存redis,每次查询仅仅1ms,性能瞬间提升百倍。 高并发 mysql 单机支撑到2K QPS就容易报警了,如果系统中高峰时期1s请求1万,仅单机mysql是支撑不了的,但是使用缓存的话,单机支撑的并发量轻松1s几万~十几万。 原因是缓存位于内存,内存对高并发的良好支持 Redis的优点 读写性能优秀:数据直接存放在内存里的 支持数据持久化,支持AOF和RDB两种持久化方式
其它技术问题
3,882
社区成员
9,046
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章