关于SocketAsyncEventArgs资源释放的问题

时间:2022-10-30 05:03:01
最近写个网络程序用到SocketAsyncEventArgs类,参考网上资料初步完成,可是测试时发现内存大量增加,资源释放不掉。每次有一个socket接入后,内存增加,然后断开socket程序内存也在增加。我是当一个socket断开,调用下面函数
 public void Dispose()
        {
            try
            {
                this.connection.Shutdown(SocketShutdown.Send);
            }
            catch (Exception)
            {
                // Throw if client has closed, so it is not necessary to catch.
                int k = 0;
            }
            finally
            {
                this.connection.Close();
                this.connection.Dispose();
               // finally
              
            }
        }

求大神们说说可能哪里占用了资源我没释放掉。
发现没分了,跪求指导,谢谢了!

7 个解决方案

#1


也有可能垃圾回收机制还没有去回收,测试时候强制调用GC清理下 看看是否内存有降

#2


引用 1 楼 rayyu1989 的回复:
也有可能垃圾回收机制还没有去回收,测试时候强制调用GC清理下 看看是否内存有降

试过用GC清理了,内存还是没下降!

#3


我用任务管理器看了一下,IO口数量一直在增加,这是什么原因?关闭了socket那资源应该释放了啊

#4


把你认为有问题的代码贴出来才能分析

#5


引用 4 楼 rayyu1989 的回复:
把你认为有问题的代码贴出来才能分析

http://blog.csdn.net/zplove003/article/details/7776518
我是参考这个博客上来写的,我没有改动过,但是内存泄漏的原因我找不到

#6


不提交具体代码没办法帮你分析的,vs顶部菜单》分析》诊断与分析,创建个分析内存的,跑起来泡个半小时你就清楚内存被什么吃了

#7


关于SocketAsyncEventArgs,本人最近也在研究,GC清理的应该是是标志为无用的对象,所以在调用GC前应该是进行这个操作:SocketAsyncEventArgs.SetBuffer(null, 0, 0),没有测试过,内存上涨现象本人也遇过

#1


也有可能垃圾回收机制还没有去回收,测试时候强制调用GC清理下 看看是否内存有降

#2


引用 1 楼 rayyu1989 的回复:
也有可能垃圾回收机制还没有去回收,测试时候强制调用GC清理下 看看是否内存有降

试过用GC清理了,内存还是没下降!

#3


我用任务管理器看了一下,IO口数量一直在增加,这是什么原因?关闭了socket那资源应该释放了啊

#4


把你认为有问题的代码贴出来才能分析

#5


引用 4 楼 rayyu1989 的回复:
把你认为有问题的代码贴出来才能分析

http://blog.csdn.net/zplove003/article/details/7776518
我是参考这个博客上来写的,我没有改动过,但是内存泄漏的原因我找不到

#6


不提交具体代码没办法帮你分析的,vs顶部菜单》分析》诊断与分析,创建个分析内存的,跑起来泡个半小时你就清楚内存被什么吃了

#7


关于SocketAsyncEventArgs,本人最近也在研究,GC清理的应该是是标志为无用的对象,所以在调用GC前应该是进行这个操作:SocketAsyncEventArgs.SetBuffer(null, 0, 0),没有测试过,内存上涨现象本人也遇过