2011-04-04 50 views
0

我的目標是創建一個獲取鏈接並將其下載到本地驅動器的類。該程序應該支持從http \ https \ ftp鏈接下載,而且在我的工作中,我有一個專用的代理(沒有身份驗證)。 主系統是通過asp.net下載的,每個學生都可以請求下載文件。 所有文件都是從50MB到無限大小的非常大的文件,因此它應該是一個快速下載程序。使用代理的多線程文件下載器c#

這是我currentcode:

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.How可以實現同時下載? 2.如何設置我的代理Webclient? 3 WebClient.DownloadAsync支持https & ftp還是應該處理它? 4.有沒有辦法實現下載更快?我看到幾個實現,包括HttpWebRequest,HttpWebResponse & Streams。它有更好的性能嗎?

回答

1

1如何實現同時下載?

您可以爲每次下載生成一個任務 - 查看任務並行庫(TPL)。確保你不會過度飽和你的互聯網連接。產生太多的下載線程實際上會對吞吐量產生不利影響。

2如何設置我的代理服務器的Web客戶端?

您必須設置Proxy屬性。

3是否WebClient.DownloadAsync支持HTTPS,FTP &或者我應該處理 呢?

這是不應該做任何事情與異步或不 -

FTP:是的,有例子here

HTTPS:是的,有一個澄清here

4有沒有辦法實現下載更快?

我懷疑直接使用WebRequest/streams會給你帶來什麼,大部分時間成本來自於將數據實際傳輸到本地機器。

+0

嗨,我沒有與帶寬問題,你能解釋我更多的TPL或給我例如參考? – RonenIL 2011-04-05 18:07:49