Скорость загрузки SFTP SSH2 (C #) - PullRequest
1 голос
/ 09 июля 2011

Я разрабатываю консольное приложение C #, которое загружает файлы с сервера SFTP с аутентификацией пары ключей SSH.

Я использую Chilkat API.

Файлы, которые я пытаюсь загрузить, очень большие, от 8 до 13 ГБ.

В настоящее время максимальная скорость загрузки, которую я могу получить, используя мое приложение, составляет около 570 КБ / с

Если я пытаюсь загрузить тот же файл с помощью FileZilla, я получаю скорость загрузки 2,6 МБ / с

Запуск с того же компьютера в той же сети.

Есть ли способ сопоставить скорости загрузки FileZilla с консольным приложением?

Ответы [ 5 ]

1 голос
/ 29 августа 2013

Я знаю, что это очень старый, но никто еще не ответил прямо. Chilkat рекомендует увеличить размеры SoRcvBuf и SoSndBuf, если у вас есть производительность сети. У меня были те же проблемы, что и у вас, и это решило мою проблему.

С Документация ChilKat:

public int SoSndBuf {get; задавать; }

Устанавливает опцию размера буфера отправки буфера. Обычно это свойство следует оставить без изменений. Значение по умолчанию равно 0, что указывает на то, что параметр сокета размера буфера отправки не должен быть установлен явно (т.е. следует использовать системное значение по умолчанию, которое может варьироваться от системы к системе).

Это свойство можно изменить, если скорость загрузки кажется низкой. Рекомендуется быть кратным 4096. Чтобы увидеть размер буфера отправки по умолчанию в текущей системе, проверьте свойство LastErrorText после вызова любого метода, который устанавливает соединение. Об этом следует сообщить под заголовком «SO_SNDBUF». Чтобы повысить производительность, попробуйте установить его в 2, 3 или 4 раза больше значения по умолчанию.

1 голос
/ 09 июля 2011

Возможно, вам нужен больший максимальный размер окна TCP: http://msdn.microsoft.com/en-us/library/ms819736.aspx

Функция .NET для управления им: Socket.SetSocketOption(SocketOptionName.ReceiveBuffer)

0 голосов
/ 09 июля 2011

На скорость SFTP влияет несколько факторов. Размер буфера SSH, размер буфера SFTP, длина конвейера входят в число этих факторов (другой алгоритм шифрования). Еще один фактор - это язык. Оптимизированный код C ++ всегда будет быстрее, чем код C #. Таким образом, несмотря на то, что вы можете достичь сопоставимых скоростей с помощью FileZilla, вы вряд ли будете соответствовать им.

Также проверяли ли вы альтернативные компоненты SFTP (их много на рынке)?

0 голосов
/ 09 июля 2011

У меня была эта проблема раньше, когда я устанавливал слишком маленький размер буфера.

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

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

0 голосов
/ 09 июля 2011

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

...