博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#TcpClien网络通信之内存泄漏
阅读量:2757 次
发布时间:2019-05-13

本文共 718 字,大约阅读时间需要 2 分钟。

最近好倒霉,查了一周的内存泄漏,终于有了着落,开始是异步导致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异步发送数据的时候,不能简单的以为发送出去就不管了,考虑实际带宽可能低于发送需要带宽,会导致内存不断增加,直到耗尽。

转载地址:http://umvad.baihongyu.com/

你可能感兴趣的文章
【算法小积累】 - 提取非0数最右侧的1
查看>>
MQTT---HiveMQ源码详解(十二)Netty-MQTT消息、事件处理(流程)
查看>>
MQTT---HiveMQ源码详解(十三)Netty-MQTT消息、事件处理(源码举例解读)
查看>>
MQTT---HiveMQ源码详解(十五)Persistence-Cluster/Single
查看>>
MQTT---HiveMQ源码详解(十六)TopicTree
查看>>
MQTT---HiveMQ源码详解(十七)Cluster-Consistent Hashing Ring & Node Lifecycle
查看>>
MQTT---HiveMQ源码详解(十八)Cluster-kryo与Serializer
查看>>
MQTT---HiveMQ源码详解(十九)Cluster-Request/Response
查看>>
C/C++的mem函数和strcpy函数的区别和应用
查看>>
关于word中文字不能被选中的问题
查看>>
如何用Eclipse for C++来查看ns中的代码关联关系
查看>>
linux重启网络的命令
查看>>
如何运行Python脚本
查看>>
如何在Word分栏状态下正确的输入脚注?
查看>>
电脑不能录音问题解决
查看>>
几种用于WSN的仿真工具
查看>>
无线路由脚本分析——计算路由开销
查看>>
#ifdef #endif 条件编译
查看>>
无线trace格式
查看>>
Fedora和XP双系统
查看>>