Я хочу создать инструменты оценки пропускной способности с помощью TcpClient. У меня проблема в том, что я хочу выполнить измерение в заранее определенное время (вместо предопределенной длины данных буфера для передачи). Если я использую циклы (многократно передаю небольшие фрагменты данных), не замедлит ли это производительность (фрагментация вручную или автоматическая фрагментация)?
Оценка пропускной способности TcpClient
Ответы (1)
Это зависит от того, отключите ли вы алгоритм Nagle. Если вы это сделаете, то да, вы сами будете фрагментировать вещи. Если вы этого не сделаете, вы вряд ли достигнете своей цели, потому что данные могут быть фактически записаны не тогда, когда вы думаете... если только другой конец соединения не отправит обратно окончательный " акк" конечно.
Я бы посоветовал вам использовать небольшую выборку для определения приблизительной скорости, а затем создать на ее основе более крупную выборку, прогнозируя, сколько времени это займет. Вам все равно придется измерять время — вы не собираетесь нажимать точное предопределенное время — так что это не должно иметь большого значения. В любом случае, вы всегда можете отрегулировать размер по мере продвижения — я предполагаю, что вы в конечном итоге отправите много пакетов, если только это не очень медленная сеть, поэтому, если вы на полпути решите отправить только 200 КБ вместо 300 КБ, это не должно иметь большого значения.
Конечно, это может звучать как ваше первоначальное предложение, но я говорю только об отправке «довольно больших» фрагментов данных за вызов... скажем, 16 КБ. (В любом случае, намного больше, чем размер пакета.) Это не должно сильно повлиять на фрагментацию, но все же позволит вам немного настроить вещи по ходу дела. Я бы не советовал вам отправлять крошечные, крошечные пакеты.