0

クライアントが c# を使用して tcp 経由でデータを受信するのにかかる時間を測定したいと考えています。

NetworkStream.Read を使用して、NetworkStream.Write を使用して送信された 100 メガビットのデータを読み取ります。バッファを同じサイズのデータ​​に設定したので、バッファアンダーランの問題などはありません。一般的にはこのようになります。

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

問題は、送信者が実際にデータを送信していなくても、ストップウォッチが既に実行されている可能性があることです。データの受信にかかった時間を正確に測定するにはどうすればよいですか? リモートPC stream.Writeのタイムラプスを使ってみたのですが、書き込みにかかった時間は極端に短いです。ところで、ストップウォッチはこの作業に最も正確なツールですか?

4

2 に答える 2

1

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 に答える