问题描述
最近写个网络程序用到SocketAsyncEventArgs类,参考网上资料初步完成,可是测试时发现内存大量增加,资源释放不掉。每次有一个socket接入后,内存增加,然后断开socket程序内存也在增加。我是当一个socket断开,调用下面函数publicvoidDispose(){try{this.connection.Shutdown(SocketShutdown.Send);}catch(Exception){//Throwifclienthasclosed,soitisnotnecessarytocatch.intk=0;}finally{this.connection.Close();this.connection.Dispose();//finally}}求大神们说说可能哪里占用了资源我没释放掉。发现没分了,跪求指导,谢谢了!
解决方案
解决方案二:
也有可能垃圾回收机制还没有去回收,测试时候强制调用GC清理下看看是否内存有降
解决方案三:
引用1楼rayyu1989的回复:
也有可能垃圾回收机制还没有去回收,测试时候强制调用GC清理下看看是否内存有降
试过用GC清理了,内存还是没下降!
解决方案四:
我用任务管理器看了一下,IO口数量一直在增加,这是什么原因?关闭了socket那资源应该释放了啊
解决方案五:
把你认为有问题的代码贴出来才能分析
解决方案六:
引用4楼rayyu1989的回复:
把你认为有问题的代码贴出来才能分析
http://blog.csdn.net/zplove003/article/details/7776518我是参考这个博客上来写的,我没有改动过,但是内存泄漏的原因我找不到
解决方案七:
不提交具体代码没办法帮你分析的,vs顶部菜单》分析》诊断与分析,创建个分析内存的,跑起来泡个半小时你就清楚内存被什么吃了
解决方案八:
关于SocketAsyncEventArgs,本人最近也在研究,GC清理的应该是是标志为无用的对象,所以在调用GC前应该是进行这个操作:SocketAsyncEventArgs.SetBuffer(null,0,0),没有测试过,内存上涨现象本人也遇过