最近好倒霉,查了一周的内存泄漏,终于有了着落,开始是异步导致GCC不回收,现在又出现了异步发送导致内存不回收。

上代码:

网络发送:

                byte[] bsend = Encoding.GetEncoding("gb2312").GetBytes(stringBuilder.ToString());m_ns.BeginWrite(bsend, 0, bsend.Length, SendCallBack, 0);

发送成功后,释放资源:

        private void SendCallBack(IAsyncResult iar){try{m_ns.EndWrite(iar);}catch (Exception){//socketDis?.Invoke();}}

看着没有问题,但是但是。。。。。。。。。。。。。。

还是有问题。

考虑一种情况,网络带宽低于发送带宽的时候,NetworkStream居然会傻傻的把我要发送的流全部缓存起来,再慢慢发送。

但是进多出少啊,不久水桶就满了,程序崩溃。

当然了,一般的简单的通信是不会出现这种情况的,但是我是用来传输视频流的,每秒可以8M的速度再传输。只见内存花花的涨。

总结:

在使用NetworkStream异步发送数据的时候,不能简单的以为发送出去就不管了,考虑实际带宽可能低于发送需要带宽,会导致内存不断增加,直到耗尽。

C#TcpClien网络通信之内存泄漏相关推荐

  1. [JS] 闭包与内存泄漏

    一句话总结闭包:函数里套函数,函数返回函数. 内存泄漏:每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址.但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删 ...

  2. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  3. C语言中的指针和内存泄漏

    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但 ...

  4. 初步判断内存泄漏方法

    有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏. 首先在Java命令行中增加-verbose:gc参数, 然后重新启动java进程. 当系统运行 ...

  5. 野指针与内存泄漏那些事

    野指针:不是NULL指针,是指向垃圾内存的指针 野指针成因: 1.指针变量没有被初始化:指针变量在创建时同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存. 2.指针p被free或者d ...

  6. 介绍两个非常好用的Javascript内存泄漏检测工具

    内存泄漏对开发者来说一般很难检测因为它们是由一些大量代码中的意外的错误引起的,但它在系统内存不足前并不影响程序的功能.这就是为什么会有人在很长时间的测试期中收集应用程序性能指标来测试性能. 最简单的检 ...

  7. 内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)

    一.定义(概念与区别) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请 了一个integer,但给它存了long才能存 ...

  8. Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  9. 内存泄漏检测工具VLD在VS2010中的使用举例

    Visual LeakDetector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.它的特点有:(1).它是免费开源的,采用LGPL协议:(2).它可以得到内存泄露点的调用堆栈,可 ...

最新文章

  1. BERT模型的OneFlow实现
  2. linux shell cgi post,linux下shell处理cgi的方法--post get
  3. 每日站立会议 12.06
  4. Bert核心代码解读
  5. php如何架构设计,PHP – 架构设计帮助 – OOP固体原则
  6. oracle数据的启动
  7. .NET(C#)代码性能优化
  8. leo免费的excel操作界面的进销存供你下载使用
  9. 典型相关分析(CCA)原理及例子
  10. 步进电机控制(PLC)
  11. linux下删原来的盘符命令,linux中创建磁盘分区 删除分区
  12. 卖家警惕 网购新骗术来袭
  13. 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务(转)
  14. wetool企业微信营销管理系统开发
  15. 如何使用轻快PDF阅读器编辑PDF文件
  16. Android系统镜像编译、烧录及调试
  17. 望京,承包了帝都码农圈的魔幻
  18. 滤波算法、中值和均值滤波区别
  19. 移动端网页开发-vh/vw/rem
  20. 软件工程之七——软件维护

热门文章

  1. Python操作Mysql实例代码教程(查询手册)
  2. 网络地址转换 NAT
  3. c#和javascript分别轻松实现计算24点
  4. 使用Owin中间件搭建OAuth2.0认证授权服务器
  5. Android 5.0 十大新特性
  6. 深度学习 --- 优化入门一(梯度下降所面临的问题)
  7. excel不显示0_【扫盲】小白必看:excel表里数字格式常见的几种错误?
  8. Linux的环境变量.bash_profile .bashrc profile文件
  9. 【安卓的一个进程等级】
  10. ASP.NET DROPDOWNLIST无刷新联动(中文URL参数处理)