关于SocketAsyncEventArgs资源释放的问题

问题描述

最近写个网络程序用到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),没有测试过,内存上涨现象本人也遇过

时间: 2024-10-30 23:30:54

关于SocketAsyncEventArgs资源释放的问题的相关文章

C#资源释放及Dispose、Close和析构方法

在开始本文前,需要一些准备知识.首先要提出"什么是资源".在CLR出来之后,Windows系统资源开始分为"非托管资源"和"托管资源".非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理:托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象. 其次再来讲,资源的释放方式.非托管资源:需要显式释放的,也即需要你写代

关于webapi中entityframework资源释放的问题

问题描述 关于webapi中entityframework资源释放的问题 由于要用到EF的延迟加载,所以不能在调用结束后立刻释放上下文.之前webform的做法是在页面OnUnload时释放.webapi中似乎没有合适的地方来释放,filter的OnActionExecuted事件也是在序列化返回数据之前,有没有什么事件可以在序列化之后调用的?这样就能很好的释放EF资源了 解决方案 不要随便using或Dispose DbContexthttp://blog.csdn.net/wanmdb/ar

求教关于c#对象资源释放问题

问题描述 求教关于c#对象资源释放问题 实现接口的Dispose()函数可以释放托管资源么?我看见微软的例子可以,可以举一些释放的例子吗? 解决方案 其实托管的资源只有一种,就是内存,其它的资源都是非托管的 解决方案二: Dispose()函数只是一个平常的函数,本质上它和你定义的别的函数名的函数没有什么不同.所以它当然不能释放托管资源. 你可以用gc.collect()来让gc去释放托管资源. 解决方案三: 如楼上所说,调用gc

一起谈.NET技术,C#资源释放及Dispose、Close和析构方法

在开始本文前,需要一些准备知识.首先要提出"什么是资源".在CLR出来之后,Windows系统资源开始分为"非托管资源"和"托管资源".非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理:托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象. 其次再来讲,资源的释放方式.非托管资源:需要显式释放的,也即需要你写代

C#资源释放及Dispose、“.NET研究”Close和析构方法

在开始本文前,需要一些准备知识.首先要提出"什么是资源".在CLR出来之后,Windows系统资源开始分为"非托管资源"和"托管资源&rdq上海网站建设uo;.非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理:托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象. 其次再来讲,资源的释放方式.非托管资源:需要显式

360安全浏览器如何资源释放更彻底

  为了在资源控制上得到更佳的表现,360安全浏览器3.0在架构方面为内存的释放做了很多优化. 尤其在多进程模式和混合模式下,在关闭网页的同时彻底释放网页占用的资源.使得因为网页自身内存泄露而导致的浏览器内存占用不断升高的问题得到根本性的解决.

关于MQ资源释放的问题

问题描述 各位大侠好,小弟最近负责的开发项目用到了MQ相关的东西.有些地方不是很懂,望大侠给予解答.我作为client通过MQI与MQ服务端通信.如果我这个client是个守护进程,后台运行,杀死的时候信号(比如:kill-9)无法捕捉.那该如何处理未断开连接的队列和队列管理器资源??谢谢啊!!! 解决方案 本帖最后由 johnelf 于 2012-02-09 10:42:34 编辑解决方案二:...自己顶下解决方案三:在MQ服务器端,可以看到你的连接的.可以在MQ服务端杀掉你的连接.还有在客户

c#资源释放问题。

问题描述 我用c#写的一个调用本地的摄像头截图然后通过通信进行传输的例子.遇到一下问题:在截图之后,第一次发送没问题,但是第二次就有问题了,我开断点捕捉异常显示GDI+中发生一般性错误.但是如果我不发送我每次就截屏的话(每次截图的文件名相同),是没问题的.然后我想每次发完之后就删除掉这张把,调试一下还是不行,该资源已经被占用...可是我每次我用完文件我都释放了资源啊.我把代码贴在下面,希望各位大神帮我看看.try{Form1.SendMessage(this.hHwnd,0x41e,0,0);I

IOCP中的socket错误和资源释放处理方法

错误处理和socket释放, 是IOCP编程中的一大难点. 本文试图就IOCP设计中经常遇到的这个难题展开论述并寻找其解决方案, 事实上, 文中所述的解决方式不仅仅适用于IOCP, 它同样适用于EPOLL等多种服务器编程的网络模型中, 前提是: 领会这种处理方式的实质. 正文: 在使用IOCP开发时, 大家经常遇到的一个难题是与socket相关的缓冲区释放不当带来的错误, 这种错误通常是由于多次对同一个指针执行了delete操作引起的. 比如, 当在执行wsasend或wsarecv返回了非pe