我看到了十二个相似的问题,但没有一个完全适合我的问题。我正在200MB光纤网络上,从1GB的服务器下载到SSD。我可以使用浏览器快速下载文件,但是当尝试使用.NET下载文件时,要花8分钟才能下载一个8MB的文件。
第一轮设置非常简单:
var WClient = new WebClient();
WClient.Proxy = null;
WebRequest.DefaultWebProxy = null;
WClient.DownloadFile(upgradeUrl, zipFilePath);
在阅读了一些帖子之后,我添加了有关Proxy=null
的内容,但是并没有任何改善。有人建议是否可能是DNS查找问题,因此我首先对服务器进行ping操作,因此它已经初始化了。我还尝试在URL的末尾添加一个随机的?random=9238432
类型的字符串,以避免缓存问题。
经过一些进一步的测试,我发现了这篇文章: https://dejanstojanovic.net/aspnet/2018/march/download-file-in-chunks-in-parallel-in-c/
实现它之后,它仍然没有更快地运行,或者直到我注意到Console输出为止。
Size: 8890499bytes
Time taken: 439ms
Parallel: 2
该下载的实时时间为1分40秒。下载成功,只是永久完成。
我想知道是否要在.NET或apache2中配置一些东西来注册下载已完成并且可以继续吗?
更新: 以下内容对我来说要快得多。
public static async Task<string> DownloadFile(string fileUri, string locationToStoreTo) {
using (var client = new HttpClient())
using (var response = await client.GetAsync(fileUri)) {
response.EnsureSuccessStatusCode();
var generatedName = locationToStoreTo;
var stream = await response.Content.ReadAsStreamAsync();
using (var fileStream = File.Create(generatedName)) {
stream.CopyTo(fileStream);
}
return generatedName;
}
}