VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 629|回复: 3

[求助] CList的不断插入与移除,造成内存不断增加 重新仔细描述

[复制链接]
50_avatar_middle
在线会员 发表于 2018-9-23 11:49:47 | 显示全部楼层 |阅读模式
3驿站币
CList的不断插入与移除,造成内存不断增加

内存增加虽然很缓慢,但是长时间肯定会占满内存

之前说的确实不清楚,我重新在仔细描述一下

用于IOCP
  1. struct CTBufferObj
  2. {
  3. public:
  4.         WSAOVERLAPPED                ov;
  5.         SOCKET m_client;//客户端连接的SOCKET
  6.         EnSocketOperation operation;
  7.         //WSABUF                                buff;
  8.         char data[BUFFER_SIZE];
  9.         int len;
  10. };

  11. CTBufferObj* pOverlapped=nullptr;
  12. CTBufferObj* uerinfo=(CTBufferObj*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(sizeof(CTBufferObj)));
  13. 我会事先分配1万,进行环形调用 ,在程序结束后,才会进行内存释放(当然,用时,我会移出,回收时,我在插入)
复制代码


求问题解决:
1:当IOCP接收到数据时,我会把CTBufferObj*,AddTail插入CList中,然后有单独的处理线程从CList取出来进行处理,采用的是:RemoveHead()

整系统中,一共有两处进行不断的插入与移除,一个是重叠,一个是接收的数据,之前一直没注意,突然看了一下内存,就发现这个问题,程序中内存分配,在最开始就进行分配到一定额度的,也调试过,没有达到使用额度而追加分配额度,所以,我果然定然,是CList的不断插入与移除造成的内存增大

个人无法解决这个问题,求驿站的大佬们,为我解决这个问题,感激不尽呀





上一篇:CEDIT 滚动问题
下一篇:关于网络编程这方面问题
75_avatar_middle
在线会员 发表于 2018-9-23 22:54:40 | 显示全部楼层
感觉你的问题就是出现在RemoveHead那里。
我感觉应该是这样
CTBufferObj*pDelete = mylist.gethead();
headfree(pDelete...);
mylist.RemoveHead();
51_avatar_middle
online_admins 发表于 2018-9-23 22:56:57 | 显示全部楼层
其实这个应该是涉及到控件内部对于数据方面的速度优化了,系统内部可能会做一些缓存之类的,这样下载再进行插入的时候速度会更快,所以这块貌似我们控制不了,楼主出现过因为频繁的插入或者删除listctrl中的数据导致的内存增大到程序崩溃的现象吗?
50_avatar_middle
ico_lz  楼主| 发表于 2018-9-24 09:50:04 | 显示全部楼层
Syc 发表于 2018-9-23 22:56
其实这个应该是涉及到控件内部对于数据方面的速度优化了,系统内部可能会做一些缓存之类的,这样下载再进行 ...

现在还没到崩溃,但是这个内存一直上涨,预计几个星期就能满吧
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-9-19 06:48

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表