首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"burn“CPU发出httpwebrequest

使用"burn“CPU发出httpwebrequest
EN

Stack Overflow用户
提问于 2019-10-05 22:27:21
回答 1查看 69关注 0票数 0

我希望使用.net HttpWebRequest运行大约10,000个并发请求,而不是所有请求都发往同一台主机,其中一些请求会通过一个代理池。

我目前使用的是线程,它在1000个并发的情况下工作得很好,但是我的CPU负载却是100%。如何修复它?

代码语言:javascript
复制
public string HttpGet(string url)
{
    try {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Timeout = 20000;
        request.CookieContainer = Cookie;
        request.AutomaticDecompression = DecompressionMethods.GZip;
        request.KeepAlive = true;
        request.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string tmp = reader.ReadToEnd();
        reader.Close();
        dataStream.Close();
        response.Close();

        return tmp;
    } catch (Exception ex) {
        return "";
    }
}

我每次都发送请求,所以在1分钟内发出1000个请求。

EN

回答 1

Stack Overflow用户

发布于 2019-10-06 17:28:48

  1. 使用异步任务而不是线程。I/O操作不需要线程来等待,但操作系统会花时间在它们之间切换。即使请求失败,
  2. 也会使用using块而不是Close调用来正确处理资源。
  3. 不要忘记为并发I/O设置正确的最大限制是antipattern.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58249236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档