0

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

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

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

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

4

2 回答 2

1

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

于 2011-01-03T04:46:07.987 回答
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();
于 2011-01-03T05:53:03.543 回答