免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7257 | 回复: 29
打印 上一主题 下一主题

求教:关于大文件读写会一次读入内存吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-09 11:42 |只看该作者 |倒序浏览
通过socket接收网络数据,一个小时后文件达到1G多,每次收到数据后就写入文件,发现1G内存差不多用完,请问有什么优化的办法吗?

论坛徽章:
0
2 [报告]
发表于 2012-05-09 11:45 |只看该作者
你哪里没释放内存吧

论坛徽章:
0
3 [报告]
发表于 2012-05-09 11:47 |只看该作者
只申请了一段内存用来存放接收的网络数据
回复 2# doswin


   

论坛徽章:
0
4 [报告]
发表于 2012-05-09 12:19 |只看该作者
你确定只申请了一次吗?debug跟踪一下看看。

论坛徽章:
0
5 [报告]
发表于 2012-05-09 12:45 |只看该作者
看描述,还是有内存泄露。

即使OS不是立刻把数据写到硬盘,也不会一直缓存的。

论坛徽章:
0
6 [报告]
发表于 2012-05-09 13:04 |只看该作者
一个线程接收网络数据,只申请了一个数组作为buffer,接收数据写入文件,即使泄露也不会达到1G多。
回复 4# sonicling


   

论坛徽章:
0
7 [报告]
发表于 2012-05-09 13:08 |只看该作者
确定只申请了一次,应该不是内存泄露的问题,接收一个小时的文件大概1G,内存消耗1G左右,打开文件会把文件全部读入内存吗?
回复 5# GFree_Wind


   

论坛徽章:
0
8 [报告]
发表于 2012-05-09 13:13 |只看该作者
iWonderLinux 发表于 2012-05-09 13:08
确定只申请了一次,应该不是内存泄露的问题,接收一个小时的文件大概1G,内存消耗1G左右,打开文件会把文件 ...

你觉得可能吗?
我觉得你发代码比较靠谱。肯定你哪里搞错了

论坛徽章:
0
9 [报告]
发表于 2012-05-09 13:17 |只看该作者
  1. while (1)
  2.     {
  3.        FD_ZERO(&fdR);
  4.        FD_SET(sock, &fdR);

  5.        rs = select(sock+1, &fdR, NULL,NULL, &timeout);
  6.        if (rs == 0)
  7.        {
  8.            //printf("\rrs:%d",rs);
  9.            continue;
  10.        }
  11.        len = recvfrom(sock,buff, BUFFSIZE,0,(struct sockaddr *)&c_addr, &addr_len);   //Recevie the UDP message.
  12.       
  13.        //printf("len:%d ",len);
  14.       
  15.        if (len < 0)
  16.        {
  17.            printf("Receive error :%s\n",strerror(errno));      
  18.            exit(errno);
  19.        }
  20.        fwrite(buff,len,1,fp);
复制代码
buff就是我申请的内存4096字节。这段代码只是一部分
回复 8# doswin


   

论坛徽章:
0
10 [报告]
发表于 2012-05-09 13:20 |只看该作者
写的过程中文件一直打开着,是这个影响吗?总不能频繁开关文件吧
回复 8# doswin


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP