Нужен совет по улучшению производительности загрузки ftp в C #

Я пишу программное обеспечение, которое загружает и скачивает несколько файлов, используя 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?

1
задан brandon 17 August 2010 в 15:52
поделиться