Ограничение скорости полосы пропускания - PullRequest
5 голосов
/ 17 июня 2010

Я написал приложение, которое синхронизирует локальные папки с сетевыми папками, но оно съедает всю мою пропускную способность, как я могу ограничить количество пропускной способности, которое использует приложение? (Программно)

Ответы [ 3 ]

2 голосов
/ 18 июня 2010

Взгляните на http://www.codeproject.com/KB/IP/MyDownloader.aspx

Он использует хорошо известную технику, которую можно найти в Downloader.Extension \ SpeedLimit

Как правило, до того, как больше данных будет прочитано из потока,выполняется проверка того, сколько данных действительно было прочитано со времени предыдущей итерации.Если эта скорость превышает максимальную скорость, то команда чтения приостанавливается на очень короткое время, и проверка повторяется.Большинство приложений используют эту технику.

0 голосов
/ 17 июня 2010

Я бы сказал "нет". Если вы не делаете что-то действительно неправильное, ваша программа не должна загружать трафик. Ваш маршрутизатор должен балансировать доступную пропускную способность между всеми запросами.

Я бы порекомендовал вам сделать следующее:

a) Создайте хеши md5 для всех файлов. Сравните хэши и / или даты и размеры файлов и синхронизируйте только те файлы, которые были изменены. Если вы не синхронизируете массивные файлы, вам не нужно синхронизировать большое количество данных.

б) Ограничить скорость отправки. В вашей ветке загрузки прочитайте файлы в чанках размером 1-8 КБ и затем вызовите Thread.Sleep после каждого чанка, чтобы ограничить скорость. Вы должны сделать это на стороне загрузки, однако.

в) Передайте все через поток Gzip. (System.IO.Compression) Для текстовых файлов это может уменьшить размер данных, которые необходимо передать.

Надеюсь, это поможет!

0 голосов
/ 17 июня 2010

Попробуйте это: http://www.netlimiter.com/ Он уже давно в моем списке "проверить это" (хотя я сам еще не пробовал).

...