我有一个继承自TcpClient的类。在那个班里,我有一个处理回答的方法。在这种方法中,我打电话给我的NetworkStream和MyBase.GetStream,并调用Read。NetworkStream.Read延迟.Net
这可以正常工作,第一次读取块的时间太长。而且太长时间我的意思是套接字已经收到了大量的数据,但直到达到任意限制时才会读取它。我可以看到它使用数据包嗅探器WireShark收到了大量的数据。
我已经将接收缓冲区设置为少量,并且非常少量(如只是几个字节)无济于事。我对传递给读取方法的缓冲区字节数组做了同样的处理,但仍然延迟。
或者换句话说。我下载600k。下载需要5秒钟(稍微超过100k /秒连接到服务器是有道理的)。最初的Read调用需要2-3秒,并告诉我只有256个字节可用(256是Recieve缓冲区和我读入的数组的大小)。然后奇迹般地,其他几十万字节可以在256字节的块中读取,每个字节只有几个进程滴答。使用数据包嗅探器,我知道在最初的2-3秒内,套接字已经收到了不止256个字节。我的连接不是.25k /秒3秒,然后400k 2秒。
当他们进来时,我如何从套接字中获取字节?
你的网卡和你的应用之间还有什么?禁用防火墙,病毒扫描程序,CRL,代理,看看会发生什么。 – 2009-12-27 12:24:40
nobugz,这是问题。这是我的反病毒应用程序。它必须缓冲一定数量的字节才能在将它送入套接字缓冲区之前进行扫描。 这是有道理的,因为我正在使用一个众所周知的端口,它会扫描。我不敢相信我没有想到这一点。 您应该将其作为回答发布,以便将其标记为好。 – Gilbes 2009-12-28 03:36:18