问题描述
相关的代码:while(true){FrameDataframeData=frameDataCollection.Take();byte[]data=Converter.StructToBytes(frameData);for(inti=0;i<remoteEndPointCount;i++){IPEndPointipendpoint=remoteEndPoints[i];sendUdpClient.Send(data,data.Length,ipendpoint);//引发OutOfMemoryException异常stringsendInfo="向"+ipendpoint.Address+":"+ipendpoint.Port+"发送数据个数:"+(SendCount[i]++);this.DataSendListBox.Invoke(updateDataSend,newobject[]{i,sendInfo});//UpdateDataSendInfo(i,sendInfo);}}
如图,sendUdpClient.Send抛出了异常,OutOfMemoryException。很明显是内存溢出,我看了C#的源码,一直追踪到IPEndPoint,Serialize()方法。但是SocketAddress..ctor(........),没有找到具体的C#源码。不知道原因出现在哪里。我想问的是,udp发送数据的时候是有缓存的吗?是不是我这边要发送的数据过多,导致了udp的缓存不够用,发生了异常。在此请教各位,不胜感激!!
解决方案
解决方案二:
贴出你的data.length、ipendpoint的具体调试值?!不要随便把OutOfMemory说成什么“明显是内存溢出”,内存跟内存之间根本不是同一个概念。在某些环境下,例如线程数超过1200或者数据字节数超过65500就会iOutOfMemory了,这都是底层一些c程序的“毛病”,跟你的进程的物理内存大小根本没有关系。
解决方案三:
这个是撑死的吧
解决方案四:
你发送的数据长度有没有超过65535?