本文共 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/