agramText);Рif (byteLength <= m_bufferManager.SendBufferSize) // 可以使用发送缓冲区 {Рbyte[] sendBuffer = m_bufferManager.SendBuffer;РEncoding.ASCII.GetBytes(datagramText, 0, byteLength, sendBuffer, m_sendBufferOffset); // 拷贝到缓冲区Рm_socket.BeginSend(sendBuffer, m_sendBufferOffset, byteLength, ...); // 发送Р}Рelse // 字符串太长,另建字节数组发送Р{Рbyte[] data = Encoding.ASCII.GetBytes(datagramText); // 获得数据字节数组 m_socket.BeginSend(data, 0, data.Length, ...); // 发送Р} 在数据发送时,如果发送缓冲的大小比实际发送包大的话,那么上述异步发送就可以使用 BufferManager 公共缓冲区。当然,用缓冲区分多次发送数据,也是一个可以考虑和有效 的方案,但实现比较复杂(留待以后解决)。数据接收则直接使用BufferManager,因为长 数据包由 Socket 自动分多次接收,不需要考虑分包及包接收顺序等问题。Р基于事件驱动的 SocketAsyncEventArgs 性能的改善,不仅与使用共享缓冲区的技术相关, 更与其在完成端口(IOCP)共享SocketAsyncEventArgs对象有关,该对象可重复使用。Р而在传统的异步Socket处理时,总会创建一个IAsyncResult对象,该对象不可重复使用, 且必须调用AsyncWaitHandle.Close()释放资源。