- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
.NET 中的 Socket 类公开了以下方法:
Socket.BeginSend Method (IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)
我有一个返回 ArraySegment<byte>
的 BufferManager 类指定的恒定大小为 2kB。现在我有一条消息要发送,假设它有 10kB 大,所以我可以使用 5 个预分配的缓冲区来存储这条消息并调用 Socket.BeginSend(IList<ArraySegment>>...)
.这条消息会自动发送吗,就像我只使用 byte[]
时那样(即,多个并行的 BeginSend 操作不会混合远程站点上的消息)?
编辑:澄清 - 我正在使用 TCP/IP 套接字,我的程序同时从多个线程调用 BeginSend。假设我们有两个数组段列表:
L1: a1 a2 a3
L2: b1 b2 b3
现在我同时从两个线程调用 BeginSend(L1...) 和 BeginSend (L2...)。我想知道这两个列表是否不会在远程端混合,我不会读到类似:a1 b1 b2 a2 b3 a3 的内容。
最佳答案
BufferManager 所做的只是维护一组固定的内存块供您使用。 BufferManager 不会影响字节的并发性,也不会影响它们的使用方式。来自 MSDN 文档:
You can use the BufferManager class to manage a buffer pool. The pool and its buffers are created when you instantiate this class and destroyed when the buffer pool is reclaimed by garbage collection. Every time you need to use a buffer, you take one from the pool, use it, and return it to the pool when done. This process is much faster than creating and destroying a buffer every time you need to use one.
BufferManager 只是一种避免调用 new[] 然后等待 GC 销毁 block 的便捷方式。发送完这些 block 后,请确保调用 BlockManager.ReturnBuffer,否则这些字节将无法用于以后的消息,并且会一直存在,直到 BufferManager 本身被 GC 处理为止。如果它将与事件的 BufferManager 一起使用,并且您正在使用这些缓冲区发送大量消息,那么您可能会泄漏大量内存。
关于c# - BeginSend<IList<ArraySegment....) 是否执行所有 ArraySegment 的原子发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569104/
我想了解以下方面的一些信息: Socket.BeginSend Method (array[]()[], Int32, Int32, SocketFlags, AsyncCallback, Objec
我需要将对套接字的 BeginSend 调用排队,并且我需要它们按时间顺序执行。为此,我使用信号量在回调函数可以运行时发出信号。 大多数情况下它是有效的,因为每个异步回调都在一个单独的线程上执行,但偶
我是编程新手,对异步套接字编程感到困惑。 例如,假设我有两个 BeginSend,一个接一个。第一个发送一百万个字符,第二个仅发送 64 个字符。 由于异步性质,第二个 BeginSend 不会在第一
所以我明白 Send 是同步的,而 BeginSend 是异步的。我听说套接字发送方法的数据传输速度比 BeginSend 快(注意:我不是在谈论 CPU 性能,而只是发送和接收数据包延迟)。谁能告诉
我正在编写一个套接字应用程序,它可以同时异步轮询多个服务器并向用户报告它们状态的任何变化。到目前为止,一切正常,除了一个我似乎无法弄清楚的小错误。 服务器每 10 秒创建一组套接字,然后调用异步连接。
我的 TCP ping/pong 工作正常,但在尝试添加第二种数据类型后,我遇到了接收程序从未触发 BeginReceive 回调的情况。 代码是相同的,除了第二个(有问题的)数据类型,序列化是提前完
当我向远程 机器发送大量数据时,发送回调几乎立即执行。 [05:10:35:981] ChildSocket.Send(): Sending 1048508 bytes. [05:10:35:988]
这是一个我不太明白的异步套接字场景...我有 2 个 Tcp 套接字,一个客户端套接字和一个服务器套接字。我的服务器套接字已绑定(bind)并正在监听端口。 我的客户端套接字连接到服务器套接字(使用
比如说,我有一个类,它包装了一个 Socket 并且(除其他外)执行异步数据发送。 我按以下方式执行发送(大大简化 - 无错误处理等): private Socket _socket; public
我使用以下代码异步发送数据,但我注意到在从 asyncRes 获取的 AsyncWaitHandle 中使用 WaitOne 根本不等待。我检查了 MSDN,它说我应该使用 ManualResetEv
.NET 中的 Socket 类公开了以下方法: Socket.BeginSend Method (IList>, SocketFlags, AsyncCallback, Object) 我有一个返回
这里的工作代码 static MessageSender TopicClient; public static void SendTopicMessage(BrokeredMessage messag
这里的工作代码 static MessageSender TopicClient; public static void SendTopicMessage(BrokeredMessage messag
例。 http://msdn.microsoft.com/en-us/library/bew39x2a%28v=vs.110%29.aspx我想知道像 BeginSend、BeginReceive 等
我是一名优秀的程序员,十分优秀!