Странное замедление при передаче файла с использованием tcpClient - PullRequest
0 голосов
/ 25 декабря 2011

Я строю некоторые классы для сетевого общения, используя tcpClient. У меня есть класс tcpserver, принимающий соединения и перетасовывающий их в фоновые потоки, чтобы он мог продолжать принимать соединения через этот порт. Я могу подключиться к серверу с несколькими клиентами и выполнять передачу файлов с сервера на клиенты. Запустив сервер и клиентов на моем компьютере разработчика, я получаю хорошую скорость передачи файлов (160 Мбит / с или около того - я использую пакеты больших размеров).

Я тестировал все большие и большие передачи файлов от нескольких клиентов и заметил странную вещь - при попытке отправить большие файлы (> 3 гигабайта) примерно на половине пути передачи начали замедляться и колебаться. Если я попытаюсь отправить свой тестовый файл на 3 гигабайта (.iso), а также переместить большие файлы (> 500 мг) с помощью двух или трех других клиентов, также работающих на моем компьютере разработчика, передача .iso может замедлиться до сканирования и останется там ... всего 1 мегабит в секунду или меньше, даже после того, как другие клиенты закончили получать свои файлы. Кроме того, без причины я вижу, что скорость снова возрастает и колеблется от 30 до 80 мегабит в секунду.

Ошибок нет, и, перебрав код, я просто не представляю, где может произойти замедление.

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

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 03 января 2012

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

0 голосов
/ 26 декабря 2011

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

...