使用代理c#的多线程文件下载器

时间:2011-04-04 23:52:49

标签: c# multithreading download nonblocking system.net

我的目标是创建一个获取链接并将其下载到本地驱动器的类。该程序应该支持从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.如何使用我的代理设置Webclient? 3 WebClient.DownloadAsync是否支持https& ftp或我应该处理它吗? 4.有没有办法实现下载更快? 我看到很少的实现包括HttpWebRequest,HttpWebResponse&流。它有更好的表现吗?

1 个答案:

答案 0 :(得分:1)

  

1如何实现同步下载?

您可以为每次下载生成任务 - 查看任务并行库(TPL)。确保您没有过度饱和您的互联网连接。产生过多的下载线程实际上会对吞吐量产生不利影响。

  

2如何使用我的代理设置Webclient?

您必须设置Proxy属性。

  

3 WebClient.DownloadAsync是否支持https& ftp或我应该处理   它?

这不应该对Async做任何事情 -

Ftp:是的,有例here

Https:是的,有澄清here

  

4有没有办法让下载更快?

我怀疑直接使用WebRequest /流可以获得任何收益,大部分时间成本来自实际将数据传输到本地计算机。