Проблема со сном в течение 1 секунды после каждой передачи состоит в том, что у вас будет нестабильная производительность сети.
Пусть BandwidthMaxThreshold будет желаемым порогом пропускной способности.
Пусть TransferRate будет текущей скоростью передачи соединения.
Тогда ...
Если вы обнаружите свой TransferRate> BandwidthMaxThreshold, тогда вы сделаете SleepTime = 1 + SleepTime * 1.02 (увеличьте время сна на 2%)
До или после каждой сетевой операции выполните
Sleep (сон)
Если вы обнаружите, что ваша TransferRate намного ниже вашего BandwidthMaxThreshold, вы можете уменьшить SleepTime. В качестве альтернативы вы можете просто затухать / уменьшать ваш SleepTime с течением времени всегда. В конце концов ваш SleepTime снова достигнет 0.
Вместо увеличения на 2% вы также можете увеличить линейное увеличение разницы между TransferRate - BandwidthMaxThreshold.
Это решение хорошо, потому что вы не будете спать, если сеть пользователя уже не так высока, как хотелось бы.