gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:12:51 26 4
gpt4 key购买 nike

我正在尝试测量网络服务的吞吐量。

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

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

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();
}
}

它似乎工作正常,除了某些东西似乎限制了该工具。如果我运行该工具的两个实例,每 40 个线程,我获得的吞吐量明显高于一个 80 个线程的实例。

我找到了 ServicePointManager.DefaultConnectionLimit 属性,我将其设置为 10000(如果我通过 app.config as suggested by Jader Dias 设置它没有任何区别)。

.NET 或我的机器上是否有任何其他设置会影响性能? (我运行的是 Vista,但我在 Windows Server 2003 上看到同样的问题)。

也许对单个进程可以建立的连接数有一些限制?

最佳答案

您必须在 app.config 或 web.config 文件中设置 maxconnection 参数:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<connectionManagement>
<add address="*" maxconnection="80"/>
</connectionManagement>
</system.net>
</configuration>

100 以内的值在 Windows XP 中运行良好。

更新:我刚刚发现上面的方法是设置 System.Net.ServicePointManager.DefaultConnectionLimit 的替代方法

关于c# - 提高 .NET 中多线程 HttpWebRequests 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/388908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com