//上次剩余长度
int iLastLeft = m_datagramBuffer.Length;
//合并之后的大小
int iCombineLen = iLastLeft + readBytesLength;
//合并缓存
byte[] bTmpAlls = new byte[iCombineLen];
//m_AllBuffer 与当前可读数据合并
Buffer.BlockCopy(m_datagramBuffer, 0, bTmpAlls, 0, iLastLeft);
Buffer.BlockCopy(m_receiveBuffer, 0, bTmpAlls, iLastLeft, readBytesLength);
目的得到m_datagramBuffer和m_receiveBuffer的合并数组,数组有时候比较大
这样写的,还是会出现OutOfMemoryException异常
int iLastLeft = m_datagramBuffer.Length;
//合并之后的大小
int iCombineLen = iLastLeft + readBytesLength;
//合并缓存
byte[] bTmpAlls = new byte[iCombineLen];
//m_AllBuffer 与当前可读数据合并
Buffer.BlockCopy(m_datagramBuffer, 0, bTmpAlls, 0, iLastLeft);
Buffer.BlockCopy(m_receiveBuffer, 0, bTmpAlls, iLastLeft, readBytesLength);
目的得到m_datagramBuffer和m_receiveBuffer的合并数组,数组有时候比较大
这样写的,还是会出现OutOfMemoryException异常
解决方案 »
- vs2008打包的程序,安装时默认目录如何禁止修改?
- 继续追踪webbrowser中button元素的问题!!
- .net问题
- 处理txt文件的数据
- 从字符串数组 a[]=new char[20] 拷贝字符串到 b[] = new char[10] 怎么拷贝?
- 请问asp.net中的server.mappath("~\\database\\a.mdb") 在winform中对应什么方法()
- 启动第三方程序并隐藏显示。
- 微信支付callback,商品信息是中文的问题
- 求助 编译时出的问题
- 创建组件“SenImport”失败。错误消息为: “System.IO.FileNotFoundException: 未能加载文件或程序集
- 异步读stream时遇到的一个奇怪的问题
- C#可以实现添加的图片改变大小和旋转吗?
数组比较大,多大呢?Buffer.BlockCopy这个方法执行多长时间呢?
其实是这样,客户端发送过来的缓冲区需要组包,得把前面剩下的组合到现在接受到的,可能有几M也可能几K,所以这个数组很动态得重建,扩容
Buffer.BlockCopy(m_receiveBuffer, 0, bTmpAlls, iLastLeft, readBytesLength);最好是这样。
创建一个缓存区,比如10K,这个缓存区的大小一定要能容纳你最大的数据包,
然后每次处理完一个包之后,就把缓冲区中剩下的数据移动缓冲区的最前面,然后又开始合并下一次接收的数据,
如此反复。1.合并
2.判断是否完整
3.移除完整包
4.剩余数据往前移