我的目标是创建一个获得链接并下载到本地驱动器的类。该程序应该支持从http\https\ftp链接下载,而且在我的工作中,我为它提供了一个专用代理(没有身份验证)。主要系统是asp.net上的下载程序,每个学生都可以请求下载一个文件。所有的文件都是相当大的文件,从50 be到无限大小,所以它应该是一个快速的下载程序。
这是我的当前代码:
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.如何使用代理设置Webclient ?3 WebClient.DownloadAsync支持https&ftp还是应该处理它? 4.有什么方法可以更快地实现下载?5.我几乎没有看到包含HttpWebRequest、HttpWebResponse和Streams的实现。它有更好的表现吗?
发布于 2011-04-05 00:13:14
1如何实现同步下载?
您可以为每个下载生成一个任务-请查看任务并行库(TPL)。确保你没有过度饱和你的互联网连接。生成过多的下载线程实际上会对吞吐量产生有害影响。
2如何用我的代理设置Webclient?
您必须设置代理属性。
3 WebClient.DownloadAsync支持https&ftp还是我应该处理它?
这不应该和异步有任何关系-
是的,有一些例子这里
Https:是的,有一个澄清的这里
是否有更快地实现下载的方法?
我怀疑直接使用WebRequest / streams是否会给您带来任何好处,大部分时间成本来自于将数据实际传输到本地机器。
https://stackoverflow.com/questions/5545664
复制相似问题