У меня есть рабочий код для загрузки многих файлов (сотен) с FTP-сервера, но он очень медленный и часто появляется ошибка тайм-аута.
Это мой текущий способ загрузки:
Using ftpClient As New WebClient()
ftpClient.Credentials = New System.Net.NetworkCredential(ftpuser, ftppassword)
For i As Integer = 0 To directoriesDownload.Count - 1
If directoriesDownload(i).Contains(".") Then
If Sync_BackgroundWorker.CancellationPending = True Then
Exit Sub
End If
Dim path As String = "ftp://" & ftpserver & "Datenbank/" + directoriesDownload(i).ToString()
Dim trnsfrpth As String = config.rootpath & "ServerDownload\" + directoriesDownload(i).ToString()
ftpClient.DownloadFile(path, trnsfrpth)
filenametodownload = directoriesDownload(i).ToString()
filesdownloaded += 1
Sync_BackgroundWorker.ReportProgress(filesdownloaded)
End If
Next
ftpClient.Dispose()
End Using
Существует ли более быстрый способ загрузки сотен небольших файлов (до 10 КБ) с FTP-сервера в VB.NET?
Было бы лучше, если бы была возможность войти в FTP только один раз вместо входа и выхода для каждого файла.
Я обнаружил, что у кого-то есть такая же проблема, но без результата:
Использование FTP для загрузки каждого файла * WHILE * получение списка файлов
Я также пробовал многопоточность с циклом Parallel.For
, но WebClient
не работает с многопоточностью. То же самое, если я попробую с ftpClient.DownloadFileAsync(New Uri(path), trnsfrpth)
.