我有一個C#控制檯應用程序,它從網站下載文件。這裏是我的方法:如何提高網站文件的下載速度?
public bool DownloadFile(string fileUri, string filePath)
{
using (var response = _GetResponce(fileUri)) {
if (response.StatusCode != HttpStatusCode.OK) {
return false;
}
using (var responseStrm = response.GetResponseStream()) {
using (var fileStrm = new FileStream(filePath, FileMode.OpenOrCreate)) {
var buffer = new byte[CommonConstants.StreamBufferSize];
int bytesRead = responseStrm.Read(buffer, 0, CommonConstants.StreamBufferSize);
while(bytesRead > 0) {
fileStrm.Write(buffer, 0, bytesRead);
bytesRead = responseStrm.Read(buffer, 0, CommonConstants.StreamBufferSize);
}
}
}
}
private HttpWebResponse _GetResponce(string requestedUri, string method = "GET")
{
var request = (HttpWebRequest)WebRequest.Create(requestedUri);
request.Method = method;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers[HttpRequestHeader.AcceptLanguage] = "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3";
request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate";
request.Headers[HttpRequestHeader.AcceptCharset] = "windows-1251,utf-8;q=0.7,*;q=0.7";
return (HttpWebResponse)request.GetResponse();
}
我試圖增加緩衝區大小,無濟於事。如果我添加線程,它可以提高下載速度嗎?
你確定瓶頸是在這個代碼中,而不是在網絡的某個地方? – Rup
是的,我確定。我在幾臺機器上運行這個代碼。 – alexmac
出於好奇,'CommonConstants.StreamBufferSize'的大小是多少?你有沒有想過增加緩衝區大小,也沒有'ReadAllBytes'方法,你也可以嘗試測試/試驗。 – MethodMan