2011-01-03 15 views
0

クライアントがtcpでデータを受信するのにかかる時間をC#を使って測定したいと思います。C#NetworkStream.Readの所要時間を測定する方法は?

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

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

問題は、送信者が実際にデータを送信していないが、ストップウォッチが既に実行されている可能性があることです。どのように私は正確にデータを受信するためにかかる時間を測定することができますか?私は遠隔のPC stream.Writeの時間の経過を使用しようとしましたが、書き込みにかかった時間は非常に小さいです。ところで、 ストップウォッチはこのタスクの最も正確なツールですか?

答えて

1

取ることができるアプローチの1つは、イベント処理によってデータの可用性に応じてデータの読み取りを開始し、ストップウォッチを開始することです。データが利用可能になったときに起動されるイベントを登録します。これには、最初と最後の不要なデータを破棄するなど、慎重な設計アプローチが必要です。

1

データが利用可能であることを示すNetworkStreamにイベントはありません。あなたが持っているのは、ポーリングに使用できるDataAvailableのプロパティです。 (!stream.DataAvailable)例えば、

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

あなたはのThread.sleep(100)ながら '書き込みすることを目的と推測;' – jgauffin

+0

@jguaffin、はい意思のthats。 do {} whileのwhileの後に ';'を置くように編集しました。 – VinayC

関連する問題