我正在创建一个显示时间表的应用程序。为此,我需要将大量数据下载到我的API中。每月开始时有将近6000个JSON文件可供下载(大约190条公交线路,每个线路每个月都有每天的URL),并且每天下载的JSON数量减少(第二天为5800个JSON),第三天〜5600,依此类推)。每个JSON大约有3 MB,每个月的开始时有6000个URL,大约有17 GB的数据。这样,我想知道是否有更快的方法。
在开始时,我尝试使用此功能:
public async static Task<List<string>> MassDataDownload(List<string> urlList)
{
List<string> listOfJsons = new List<string>();
using (HttpClient client = new HttpClient())
{
foreach(var url in urlList)
{
HttpResponseMessage response = await client.GetAsync(url);
var json = string.Empty;
if (response.IsSuccessStatusCode)
json = await response.Content.ReadAsStringAsync();
else
continue;
listOfJsons.Add(json);
}
}
return listOfJsons;
}
,但花了几乎10分钟才能下载甚至1/10的链接。然后我遇到this mass data download SO page,我的错误是使用一个HttpClient下载,而我试图在很短的时间内多次访问一个站点。根据那里的信息,我创建了以下功能:
public async static Task<List<string>> MassDataDownload(List<string> urlList)
{
BlockingCollection<HttpClient> ClientQueue = new BlockingCollection<HttpClient>();
urlList.ForEach(x => ClientQueue.Add(new HttpClient()));
List<string> listOfJsons = new List<string>();
foreach (var url in urlList)
{
var worker = ClientQueue.Take();
var json = await worker.GetStringAsync(url);
worker.Dispose();
listOfJsons.Add(json);
}
return listOfJsons;
}
,但下载速度仍然很慢。有没有更快的方式下载这些数据,或者有什么框架可以帮助我实现这一目标?