【问题标题】:How to measure the time taken by C# NetworkStream.Read?如何测量 C# NetworkStream.Read 所花费的时间?
【发布时间】:2011-01-03 04:36:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# bandwidth tcpclient measurement networkstream


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      NetworkStream 中没有指示数据可用的事件。您所拥有的只是可用于轮询的DataAvailable 属性。例如,

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

      【讨论】:

      • 猜你打算写while(!stream.DataAvailable) Thread.Sleep(100);
      • @jguaffin,是的,这就是目的。答案编辑为在 do{ }while 之后放置 ;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多