Я пишу программное обеспечение, которое загружает и скачивает несколько файлов, используя ftp с удаленного сервера. Скорости загрузки в порядке и остаются неизменными на уровне выше 4 Мбит / с. Небольшие загрузки происходят мгновенно. Проблема, с которой я сталкиваюсь, - когда моя программа загружает большой 40-мегабайтный zip-файл, у меня очень низкая производительность. Кажется, что он загружается пакетами (100-200 Кбит / с), затем задерживается на секунду и делает это несколько раз, пока файл не завершит загрузку. Программная загрузка файла с того же сервера занимает 30 секунд, загрузка того же файла на тот же сервер с использованием filezilla занимает примерно столько же времени. Загрузка через программное обеспечение может занять до 15 минут. Что-то явно не так.
Я использую библиотеку starksoft ftp для загрузки / выгрузки отсюда: http://starksoftftps.codeplex.com/
Вот пример проблемного кода:
FtpClient ftp = new FtpClient(sourcecfg.Host);
ftp.MaxUploadSpeed = 0;
ftp.MaxDownloadSpeed = 0;
ftp.FileTransferType = TransferType.Binary;
ftp.DataTransferMode = TransferMode.Passive;
ftp.Open(sourcecfg.FtpUserName, sourcecfg.FtpPassword);
ftp.PutFile(backupTempPath, targetcfg.getFullPath() + "wordpress-backup.zip", FileAction.Create);
Я также пытался использовать перегруженную версию PutFile, которая принимает объект Stream вместо строки пути. Результаты не изменились.
Случайные события: я компилирую в Visual C # Express 2008 в WinXP внутри экземпляра VirtualBox. Я пробовал как отладочную, так и производственную версию без изменений в результатах.
Проблемы ощущаются как проблемы с буферизацией или регулированием, но, глядя на внутренний код классов ftp, я не вижу ничего необычного, и я специально устанавливаю, чтобы это не регулировалось. Любые предложения или комментарии об этой конкретной библиотеке компонентов ftp?