使用代理 C# 的多线程文件下载器
本文关键字:多线程 文件下载 代理 | 更新日期: 2023-09-27 17:48:54
我的目标是创建一个获取链接并将其下载到本地驱动器的类。该程序应该支持从http''https''ftp链接下载,而且在我的工作中,我有一个专用的代理(没有身份验证)。主系统是下载器,每个学生都可以请求下载文件 asp.net。所有文件都是相当大的文件,从50MB到无限大小,所以它应该是一个快速下载器。
这是我当前的代码:
public void DownloadLink(string link)
{
string filename ;
try
{
WebClient wc = new WebClient();
Uri downloadLink= new Uri(link);
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompleted);
filename = link.Substring(link.LastIndexOf("/") + 1);
Console.WriteLine("Downloading File" + filename);
wc.DownloadFileAsync(downloadLink, filename);
}
catch (Exception i)
{
System.Console.WriteLine ("Failed" + i.ToString());
}
}
private void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
Console.WriteLine("Download Completed");
}
以下是我的问题:1.如何实现同步下载?2.如何使用我的代理设置Web客户端?3 WebClient.DownloadAsync 是否支持 https&ftp,还是我应该处理它?4.有没有办法使下载更快?5.我看到很少有包含HttpWebRequest,HttpWebResponse和Streams的实现。它有更好的性能吗?
1 如何实现同时下载?
您可以为每个下载生成一个任务 - 请查看任务并行库 (TPL)。确保您不会过度饱和您的互联网连接。生成过多的下载线程实际上会对吞吐量产生不利影响。
2 如何使用我的代理设置网络客户端?
您必须设置代理属性。
3 WebClient.DownloadAsync 是否支持 https&ftp,或者我应该处理 它?
这应该与异步无关 -
Ftp:是的,这里有例子
Https:是的,这里有一个澄清
4 有没有办法实现更快的下载?
我怀疑直接使用 WebRequest
/流会为您带来任何好处,大部分时间成本来自将数据实际传输到本地机器。