WebClient.DownloadString()下载重复很慢

时间:2017-03-16 11:01:19

标签: c# json webclient webclient-download

这个问题已经回答了很多次,但不幸的是对我来说没有答案可行。

我只是使用WebClient.DownloadString()并且它的执行非常慢。我已经尝试将WebClient.Proxy设置为null和GlobalProxySelection.GetEmptyWebProxy(),这不起作用,我不是最接近我的互联网速度。我做错了什么?

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var res = GetData("tp");
        ShowData(res);
        res = GetData("nl");
        ShowData(res);
        res = GetData("sp");
        ShowData(res);
        res = GetData("en");
        ShowData(res);
        res = GetData("in");
        ShowData(res);
        res = GetData("st");
        ShowData(res);
        res = GetData("sh");
        ShowData(res);
        res = GetData("fl");
        ShowData(res);
        res = GetData("ce");
        ShowData(res);
    }

    public IEnumerable<object> GetData(string playListName)
    {
        try
        {
            String url = string.Empty;
            string jsonStr = string.Empty;

            if (playListName == "tp")
                url = "https://content.jwplatform.com/feeds/wDg7QXiZ.json";
            else if (playListName == "nl")
                url = "https://content.jwplatform.com/feeds/ZluqvHh7.json";
            else if (playListName == "sp")
                url = "https://content.jwplatform.com/feeds/CqjyIXVZ.json";
            else if (playListName == "en")
                url = "https://content.jwplatform.com/feeds/FEvaC7IT.json";
            else if (playListName == "in")
                url = "https://content.jwplatform.com/feeds/7HSiwnEm.json";
            else if (playListName == "st")
                url = "https://content.jwplatform.com/feeds/ioE6BWAD.json";
            else if (playListName == "sh")
                url = "https://content.jwplatform.com/feeds/XHZFlpw1.json";
            else if (playListName == "fl")
                url = "https://content.jwplatform.com/feeds/N2gtCgnE.json";
            else if (playListName == "ce")
                url = "https://content.jwplatform.com/feeds/Lw3otpHB.json";
            else
                url = string.Empty;

            using (var webClient = new WebClient())
            {
                webClient.Proxy = null; // not working
                //webClient.Proxy = GlobalProxySelection.GetEmptyWebProxy(); // not working
                jsonStr = webClient.DownloadString(url); // take 8 to 10 seconds
            }
            return jsonStr;
        }
        catch (Exception) { return null; }
    }
}

调用browser-url中的url工作正常

1 个答案:

答案 0 :(得分:1)

很难确切地知道什么是缓慢而不深入研究的主要原因(查看更广泛的代码环境,监控网络和/或分析应用程序)。

话虽如此,一般来说,我能想到的一些事情可能有所帮助:

  1. 如果您可以使用HttpClient进行多次调用,那么它可能会提高性能。与weblient不同,要获得最佳性能,您需要重用相同的Httpclient实例(这可能会节省您的请求,如dns查找)。
  2. 如果有许多请求并行运行,那么您可能想知道.net允许您并行运行最多两个请求。您可以通过配置端点的连接限制来更改它。

  3. 如果可能,你还没有配置它,那么你可以设置httpclienthandler 除deflate或gzip内容类型之外的automaticDecompression属性。这将使服务器在支持它的情况下压缩消息,然后再将其发送回您的页面。

  4. 请记住,问题之夜在其他地方 - 比如网络问题或端点限制。