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

2024-01-07

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

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

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

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设置它没有什么区别)正如贾德·迪亚斯建议的 https://stackoverflow.com/a/436477/5542).

.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。

Update:我刚刚发现上面的方法是设置 System.Net.ServicePointManager.DefaultConnectionLimit 的另一种方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高 .NET 中多线程 HttpWebRequest 的性能 的相关文章

  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 重载<<的返回值

    include
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 如何像 pylab 的 specgram() 一样绘制频谱图?

    在 Pylab 中 specgram 函数为给定的幅度列表创建频谱图 并自动为频谱图创建窗口 我想生成频谱图 瞬时功率由下式给出 Pxx 通过运行边缘检测器对其进行修改 然后绘制结果 Pxx freqs bins im pylab spec
  • 如何阅读谷歌日历中的提醒

    我正在尝试阅读用户设置的提醒 我所说的 提醒 是什么意思 目前有两种不同的含义 第一个是与日历中每个事件相关的 警报 您可以从中读取它们CalendarContract Reminders 第二个是用户通过 Google Now 使用 记住
  • 检查 pandas 数据帧的最后一行是否满足条件的最佳方法是什么?

    我在尝试创建一个新列时遇到了困难 该新列是基于 信号 列的检查列 如果最后五行 包括最后一行 为 1 则返回 1 如果最后五行 包括最后一行 为 0 则返回 0 其他都为 check 的最后一个值 如下所示 我有以下数据框 signal i
  • 当拦截空格和箭头等按键时停止页面滚动

    我正在使用 JavaScript 和 Prototype 并捕获用户的按键操作 我使用如下代码成功捕获了回车符 空格和箭头 Event observe window keyup function e switch e keyCode cas
  • firebase错误W/DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类

    我尝试基于登录 注册帐户构建应用程序 我创建了它的 Firebase 并通过电子邮件启用身份验证 我添加了 google play services json 文件 我添加了 apply plugin com google gms goog
  • 在詹金斯中并行运行两个管道时出现死锁

    目前我有以下问题 我编写了一个 Jenkinsfile 来在管道中构建我的存储库 每个存储库在多分支管道中都有自己的管道 每当我推送存储库时 管道就会开始工作 对于建筑物 我有一个带有两个节点的代理 当多分支管道运行时 多分支管道使用一个节
  • Android 应用程序中 ECC 密钥的保护

    我已经使用 ECC 密钥对完成了 Android 应用程序 当我去年开发它时 我想在Android Keystore中创建ECC密钥 不幸的是 这个 ECC 密钥用于生成会话密钥 这要归功于ECDH https en wikipedia o
  • 如何更改 Play、SBT 及其插件使用的 Scala 版本?

    是否有必要更改 SBT 及其插件使用的 Scala 版本 我正在使用 Play Framework 2 1 1 RC2 我想创建使用 Scala 2 10 1 的新项目 为了实现这一目标 我做了以下工作 添加依赖项 org scala la
  • 在手机上的真实日历中设置提醒吗?

    我想在手机日历上添加提醒 换句话说 提醒需要在手机的真实日历中 我们可以使用 AlarmManager 创建提醒 但我希望它出现在日历中 我如何在 Android 中制作这个 在按钮单击或您想要向日历添加提醒的任何位置添加此代码 Uri E
  • Git删除分支而不克隆?

    有没有办法从 Git 存储库中删除分支而不进行克隆或任何其他类型的本地副本 基本上 我正在开发用于发布管道的仪表板 并且不想在仪表板服务器上拥有任何工作项目的代码只是为了删除已部署的功能分支 如果重要的话 我们使用 Atlassian Bi
  • 如何使用 .zshrc 将 ~/.composer/vendor/bin 目录放入您的 PATH 中

    这可能是一个非常菜鸟的问题 但我正在尝试在我的 Mac 上安装 Homestead 我正在通过以下方式执行安装步骤http laravel com docs 4 2 homestead http laravel com docs 4 2 h
  • 如何在3d中挤出一条路径?

    我正在尝试在 3d 中挤出一条路径 还没有什么奇特的 只是遵循一些点并使用正多边形作为 管道 我现在使用Processing 来快速构建原型 但稍后会将代码转换为OpenGL 我的问题是以直角旋转 关节 我想我大概知道如何获得角度 但不确定
  • opencv中Canny操作自动计算低阈值和高阈值

    在 OpenCV 中 canny 算子的低阈值和高阈值是强制性的 cvCanny input output thresh1 thresh2 在 Matlab 中 有一个选项可以自动计算这些值 edge input canny 我研究了 Ma
  • 匹配两个光栅的分辨率

    我使用两个栅格 每个栅格具有不同的分辨率 我想知道是否有一种更有效的方法将较粗的光栅分辨率与较精细的光栅分辨率相匹配 现在我正在使用蒙版功能来节省一些时间 剪辑到正确的范围并更改分辨率 library raster the raster t
  • LINQ:在 LINQ let 中使用三元 ( ?: ) 是不够的,需要一个“IF”,但似乎无法让它工作

    我试图在 LINQ 的 LET 中包含一个 IF 但我无法让它工作 它似乎适用于三元运算符 但这是 TRUE 或 FALSE 我需要有两个以上的选项 我认为这很好地解释了这一点 基本上我有一个选择 它使用数据库中的联接来选择项目 然后我得到
  • 创建项目后如何让VS2008创建不同的*.DLL名称?

    要在 VS2008 中创建项目 您必须在创建项目时为编译后的输出指定一个名称 如果您正在创建类库 则此输出为 DLL 我可以通过 VS2008 界面更改项目中的所有其他名称 如果我后来后悔输出的名称 我无法找到更改项目的输出 exe 或 d
  • 为什么Class.forName('数据库驱动程序')?

    Why Class forName org apache derby jdbc EmbeddedDriver dbConnection DriverManager getConnection strUrl props 代替 dbConnec
  • 从输入 Haskell 读取数字

    我想要一个函数 它可以读取任意整数 直到插入数字 0 然后显示插入到有序列表中的数字 为此我写了这个函数 import Data List readIntegers IO readIntegers do putStrLn insert a
  • 有没有办法在 TFS 中进行部分签入?

    我有一个包含两个独立修改的文件 我只想犯其中之一 有什么方法可以只签入文件的一部分 无需我修改或搁置 取消搁置它 本质上 在提交时创建一个临时文件 然后将其签入而不是磁盘上的文件 不 唯一的办法就是shelve您有哪些更改 恢复到以前的版本
  • 提高 .NET 中多线程 HttpWebRequest 的性能

    我正在尝试测量网络服务的吞吐量 为了做到这一点 我编写了一个小工具 它可以连续发送请求并从多个线程读取响应 每个线程的内循环内容如下所示 public void PerformRequest WebRequest webRequest We