如何衡量C#NetworkStream.Read所用的时间?

时间:2011-01-03 04:36:22

标签: c# bandwidth tcpclient measurement networkstream

我想测量客户端使用c#通过tcp接收数据所花费的时间。

我使用NetworkStream.Read读取使用NetworkStream.Write发送的100兆位数据。我将缓冲区设置为相同大小的数据,因此没有缓冲区欠载问题等。通常它看起来像这样。

Stopwatch sw = new Stopwatch();
sw.Start();
stream.Read(bytes, 0, bytes.Length);
sw.Stop();

问题是,发件人可能没有实际发送数据但秒表已经在运行。如何准确测量接收数据所需的时间?我确实尝试使用远程pc stream.Write的时间流逝,但写入的时间非常小。 顺便说一句,秒表是这项任务最准确的工具吗?

2 个答案:

答案 0 :(得分:1)

您可以采取的一种方法是根据事件处理的数据可用性开始读取数据并启动秒表。注册将在数据可用时触发的事件。这需要仔细的设计方法,例如丢弃初始和最终不需要的数据。

答案 1 :(得分:1)

NetworkStream中没有任何事件表明数据可用。您拥有的只有DataAvailable属性,您可以用来进行轮询。例如,

do {
  // sleep for some time
}
while(stream.DataAvailable);
Stopwatch sw = new Stopwatch();
sw.Start();
stream.Read(bytes, 0, bytes.Length);
sw.Stop();