.net Tcpclient/Tcplistner类是否比socket类快

.net Tcpclient/Tcplistner类是否比socket类快,.net,.net,我的应用程序是用.net编写的,在windows server上运行。它通过TCP/IP与远程服务器连接并继续侦听。它在连接开始时只发送一条消息,这是一条登录消息,此后它不再发送任何消息,只从服务器上侦听。它是一个流套接字,数据包持续频繁地出现,大约6000个大小从60字节到200字节不等的数据包出现。到目前为止,我使用socket类并连接到远程服务器。发送登录请求后,我开始连续接收流。要接收我正在使用BeginReceive、socketflags none的流。每次开始接收后,它都会重复这个

我的应用程序是用.net编写的,在windows server上运行。它通过TCP/IP与远程服务器连接并继续侦听。它在连接开始时只发送一条消息,这是一条登录消息,此后它不再发送任何消息,只从服务器上侦听。它是一个流套接字,数据包持续频繁地出现,大约6000个大小从60字节到200字节不等的数据包出现。到目前为止,我使用socket类并连接到远程服务器。发送登录请求后,我开始连续接收流。要接收我正在使用BeginReceive、socketflags none的流。每次开始接收后,它都会重复这个任务。是否有其他方法可以更快地接收流。我的应用程序是实时的,并且对时间非常关键。甚至1微秒也很重要。任何人都可以建议。

TcpClient
只是
套接字
网络流
上的一个包装器。它不会运行得更快——它只是一个不同(更方便)的API。此外,正如约阿希姆指出的,这不太可能成为真正的瓶颈

您可以尝试一些想法:

  • 如果使用
    NetworkStream
    API,请检查
    DataAvailable
    ,这表明是否有数据缓冲;如果存在,则尝试处理sync(通过少量
    读取
    ),直到
    DataAvailable
    为false,此时切换到async*(
    BeginRead
  • 将缓冲消息和处理消息的步骤分开-您的计算机很可能有多个核心,单独的读取循环/处理队列可能会增加吞吐量;您也可以考虑并行处理线程,但更复杂的

在处理远程服务器时,“哪怕是1微秒的事情”都是不可行的。在这个级别上,您可能还想疯狂地进行垃圾收集,比如查看
struct
的使用情况(通过
ref
传递),这与使用
class
非常不同,并且不能通过平面交换进行更改。和对象池等。非常棘手。

这将有助于显示更多代码;你的接收循环是什么样子的?除非服务器程序在同一台计算机上,或者在本地高速网络上,否则网络延迟会使微秒分辨率变得无用。