C#TcpClien网络通信之内存泄漏

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


猜你喜欢

转载自blog.csdn.net/g0415shenw/article/details/81131580
今日推荐