相关疑难解决方法(0)

提高.NET中多线程HttpWebRequests的性能

我正在尝试衡量Web服务的吞吐量.

为了做到这一点,我编写了一个小工具,可以连续发送请求并从多个线程中读取响应.

每个线程的内部循环的内容如下所示:

public void PerformRequest()
{
  WebRequest webRequest = WebRequest.Create(_uri);

  webRequest.ContentType = "application/ocsp-request";
  webRequest.Method = "POST";
  webRequest.Credentials = _credentials;
  webRequest.ContentLength = _request.Length;
  ((HttpWebRequest)webRequest).KeepAlive = false;

  using (Stream st = webRequest.GetRequestStream())
    st.Write(_request, 0, _request.Length);

  using (HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse())
  using (Stream responseStream = httpWebResponse.GetResponseStream())
  using (BufferedStream bufferedStream = new BufferedStream(responseStream))
  using (BinaryReader reader = new BinaryReader(bufferedStream))
  {
    if (httpWebResponse.StatusCode != HttpStatusCode.OK)
      throw new WebException("Got response status code: " + httpWebResponse.StatusCode);

    byte[] response = reader.ReadBytes((int)httpWebResponse.ContentLength);
    httpWebResponse.Close();
  }      
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,除了似乎有限制工具.如果我使用每40个线程运行该工具的两个实例,那么我获得的吞吐量明显高于具有80个线程的一个实例.

我找到了ServicePointManager.DefaultConnectionLimit属性,我设置为10000(如果我按照Jader …

.net c# multithreading httpwebrequest

29
推荐指数
2
解决办法
2万
查看次数

Linux上的C#服务器可伸缩性问题

我在Visual Studio 2010和Mono Develop 2.8上都开发了一个C#服务器.NET Framework 4.0

看起来这台服务器在Windows上比在Linux上表现得更好(在可扩展性方面).我使用Apache的ab工具在本机Windows(12个物理内核),8和12个内核Windows和Ubuntu虚拟机上测试了服务器可扩展性.

窗口响应时间非常平坦.当并发级别接近/克服核心数量时,它开始上升.

由于某种原因,Linux的响应时间要糟糕得多.从并发级别5开始,它们几乎呈线性增长.此外,8核和12核Linux VM的行为也相似.

所以我的问题是:为什么它在Linux上表现更差?(我该如何解决这个问题?).

请查看附带的图表,它显示了满足75%请求的平均时间作为请求并发的函数(范围栏设置为50%和100%). 作为请求并发的函数,满足75%请求的时间

我有一种感觉,这可能是由于mono的垃圾收集器.我尝试使用GC设置,但我没有成功.有什么建议吗?

一些其他背景信息:服务器基于HTTP侦听器,可快速解析请求并在线程池上对它们进行排队.线程池负责用一些密集的数学回复那些请求(计算约10秒的答案).

c# mono performance scalability server-side

12
推荐指数
1
解决办法
1688
查看次数