Как измерить время, затраченное на C # NetworkStream.Read? - PullRequest
0 голосов
/ 03 января 2011

Я хочу измерить время, необходимое клиенту для получения данных по протоколу TCP, используя c #.

Я использую NetworkStream.Read для чтения 100 мегабит данных, отправленных с использованием NetworkStream.Write. Я установил для буфера тот же размер данных, чтобы не было проблем с опустошением буфера и т. Д. Обычно это выглядит так.

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

Проблема в том, что существует вероятность того, что отправитель фактически не отправил данные, но секундомер уже запущен. Как я могу точно измерить время, необходимое для получения данных? Я пытался использовать промежуток времени удаленного потока ПК. Пишу, но время записи крайне мало. Кстати, секундомер самый точный инструмент для этой задачи?

Ответы [ 2 ]

1 голос
/ 03 января 2011

В NetworkStream нет событий, указывающих на доступность данных.Все, что у вас есть, это DataAvailable свойство, которое вы можете использовать для опроса.Например,

do {
  // sleep for some time
}
while(stream.DataAvailable);
Stopwatch sw = new Stopwatch();
sw.Start();
stream.Read(bytes, 0, bytes.Length);
sw.Stop();
1 голос
/ 03 января 2011

Один из подходов, который вы можете использовать, - это начать чтение данных и запустить секундомер в зависимости от доступности данных посредством обработки событий. Зарегистрируйте событие, которое будет запущено, когда будут доступны данные. Это потребует тщательного подхода к проектированию, например, отбрасывание начальных и конечных ненужных данных.

...