Как скачать файл в vb .net с тайм-аутом загрузки?

Я хочу загрузить тысячи файлов из Интернета и сохранить их локально. Какой самый эффективный способ? Важно тайм-аут сбоев в течение 10 секунд.

Есть ли лучший способ транслировать один поток в другой? Может быть, меньший буфер, например 1024 байта, более эффективен для больших файлов?

Dim w_req As System.Net.HttpWebRequest = CType(System.Net.HttpWebRequest.Create("http://blah.blah.blah/blah.html"), System.Net.HttpWebRequest)
w_req.Timeout = 10000
Dim w_res As System.Net.HttpWebResponse = CType(w_req.GetResponse(), System.Net.HttpWebResponse)
Dim br As New System.IO.BinaryReader(w_res.GetResponseStream())
Dim fs As New System.IO.FileStream(LocalFileName, IO.FileMode.CreateNew, IO.FileAccess.Write, IO.FileShare.Write)
Dim b() As Byte = br.ReadBytes(CInt(br.BaseStream.Length))
fs.Write(b, 0, b.Length)
fs.Close()
br.Close()

person Eyal    schedule 04.02.2010    source источник
comment
Почему вы используете потоки, когда вы можете легко использовать WebClient.DownloadFile?   -  person svick    schedule 04.02.2010


Ответы (1)


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


Обработка потоков мне кажется прекрасной, но я не эксперт в этих вопросах. Если вы извлекаете очень большие файлы, это может уменьшить потребление памяти, если делать это по частям. В .net 4.0 вы сможете использовать Stream. Копировать в.

Связанный вопрос: Лучший способ копирования между двумя экземплярами Stream - C#

person Heinzi    schedule 04.02.2010
comment
... но имейте в виду, что написание правильного, надежного многопоточного программного обеспечения чаще всего нетривиально... - person Mitch Wheat; 04.02.2010
comment
Конечно. Предположим, что я уже умею делать нити. (Что я, вероятно, тоже делаю неправильно, но неважно.) Правильно ли организована потоковая передача? - person Eyal; 04.02.2010