0

我的目标是创建一个获取链接并将其下载到本地驱动器的类。该程序应该支持从 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.有没有办法让下载更快?5.我看到很少的实现包括 HttpWebRequest、HttpWebResponse 和 Streams。它有更好的性能吗?

4

1 回答 1

1

1 如何实现同时下载?

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

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

您必须设置代理属性。

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

这不应该与异步做任何事情 -

Ftp:是的,这里有例子

Https:是的,这里有一个说明

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

我怀疑WebRequest直接使用 / 流会给你带来什么,大部分时间成本来自于将数据实际传输到本地机器。

于 2011-04-05T00:13:14.813 回答