我的应用程序是用.net编写的,并运行在Windows服务器上。它通过TCP / IP连接远程服务器并继续监听。它只在连接开始时发送一条消息,这是一条登录消息,此后它从不发送任何消息,只是从服务器监听。它的流套接字和数据包不断出现,大约6000个数据包,大小从60字节到200字节不等。到目前为止,我使用套接字类并连接到远程服务器。发送登录请求后,我开始连续接收流。要接收流,我使用BeginReceive,socketflags none。在每次开始接受之后,它会重复这项任务。有没有其他方式以更快的方式接收流。我的应用程序是实时的,非常非常关键。甚至1微秒也很重要。任何人都可以建议。
答案 0 :(得分:2)
TcpClient
只是 Socket
和NetworkStream
之上的包装。它不会更快地运行 - 它只是一个不同的(更方便的)API。此外,正如约阿希姆所说 - 这不太可能是一个真正的瓶颈。
您可以尝试一些想法:
NetworkStream
API,请检查DataAvailable
,这表示是否有数据缓冲;如果有,请尝试处理同步(通过几个Read
),直到DataAvailable
为假,此时切换到 async *({ {1}})在处理远程服务器时,“即使是1微秒的事情”也是不可行的。在那个级别,你也想在垃圾收集上疯狂,可能会查看BeginRead
用法(通过struct
传递),这与使用ref
非常不同,而且不能通过扁平交换改变。和对象池等等非常棘手。