求救!使用时遇到内存泄露
我实用CTcpServer作为服务端,该服务端维护一个ConnID数组,当收到OnAccept时,将ConnID放入数组,当收到OnClose、OnError、OnServershutdown等通知时,将相应的ConnID移出数组,以上对于数组的操作都做了同步;同时,我又开了一个线程不断地遍历这个数组,往每个ConnID发送数据包(约10kB/s);当我用Telnet客户端连接上述服务端后,能收到数据,但是服务端的内存在不断上涨,经过初步检查,似乎是某些PostSend后,完成端口没有返回,导致占用的私有堆内存未回收。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
引用来自“伤神小怪兽”的评论
1、可能服务器程序有Bug,导致内存泄漏,好好调试
2、可能服务器程序处理性能不足,导致数据在组件中不断堆积,好好调试
另外,强烈建议用Get/SetConnectionExtra() 代替你的数组,详情参考HP-Socket开发指南
引用来自“伤神小怪兽”的评论
1、可能服务器程序有Bug,导致内存泄漏,好好调试
2、可能服务器程序处理性能不足,导致数据在组件中不断堆积,好好调试
另外,强烈建议用Get/SetConnectionExtra() 代替你的数组,详情参考HP-Socket开发指南
引用来自“伤神小怪兽”的评论
1、可能服务器程序有Bug,导致内存泄漏,好好调试
2、可能服务器程序处理性能不足,导致数据在组件中不断堆积,好好调试
另外,强烈建议用Get/SetConnectionExtra() 代替你的数组,详情参考HP-Socket开发指南
1、可能服务器程序有Bug,导致内存泄漏,好好调试
2、可能服务器程序处理性能不足,导致数据在组件中不断堆积,好好调试
另外,强烈建议用Get/SetConnectionExtra() 代替你的数组,详情参考HP-Socket开发指南
其实现在就是2个常驻线程,一个是CTcpServer内部的用来调用GetQueuedCom...的,最终产生各种On...通知的;另一个是我定义的,不停地循环我的ConnID数组,发送数据至每个ConnID。
因为我不是很熟悉Telnet协议,比较担心的是这种情况:在某个时刻组件内部产生一个异常,还未来得及触发OnError,此时我的发送线程在往这个异常的ConnID上发数据,这种情况会不会导致完成端口不返回?或者返回很慢?或者必须等Telnet关闭才能返回?
引用来自“Athrob”的评论
往每个ConnID发送数据包, 这里会不会没及时释放.
引用来自“Athrob”的评论
往每个ConnID发送数据包, 这里会不会没及时释放.
往每个ConnID发送数据包, 这里会不会没及时释放.