C#.NET Framework 4.6.1海量数据下载

时间:2018-11-16 12:26:28

标签: c# .net-framework-version

我正在创建一个显示时间表的应用程序。为此,我需要将大量数据下载到我的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;
    }

,但下载速度仍然很慢。有没有更快的方式下载这些数据,或者有什么框架可以帮助我实现这一目标?

0 个答案:

没有答案