Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过TCP增加.NET远程处理使用的线程数?_C#_Asp.net_.net_Multithreading_Remoting - Fatal编程技术网

C# 如何通过TCP增加.NET远程处理使用的线程数?

C# 如何通过TCP增加.NET远程处理使用的线程数?,c#,asp.net,.net,multithreading,remoting,C#,Asp.net,.net,Multithreading,Remoting,我们正试图通过TCP增加.NET远程处理使用的线程数。我们已经尝试更改ThreadPool.SetMinThreads,但是我们的压力测试表明.NET远程处理只能处理大约100个并发请求。(但这不是一个硬限制)。在TaskManager中,我们可以看到远程处理服务器进程线程数从11增长到大约80,然后在压力测试后又下降到11。我们正在运行ASP.NET 4.0应用程序。检查SetMinThreads的返回值 如果指定负数或大于活动线程池线程的最大数量(使用GetMaxThreads获得),Set

我们正试图通过TCP增加.NET远程处理使用的线程数。我们已经尝试更改ThreadPool.SetMinThreads,但是我们的压力测试表明.NET远程处理只能处理大约100个并发请求。(但这不是一个硬限制)。在TaskManager中,我们可以看到远程处理服务器进程线程数从11增长到大约80,然后在压力测试后又下降到11。我们正在运行ASP.NET 4.0应用程序。

检查SetMinThreads的返回值

如果指定负数或大于活动线程池线程的最大数量(使用GetMaxThreads获得),SetMinThreads将返回false,并且不会更改任何最小值。
()总而言之。远程处理服务器由windows服务托管,远程处理客户端由IIS托管。要执行压力测试,您可以使用apachebench调用远程客户端,远程客户端调用远程服务器。您注意到,尽管您增加了远程处理服务器上线程池中的最大线程数,但远程处理服务器处理的并发请求不超过100个

如果我所说的都是真的,我认为这里缺少一件事,即IIS也有可用于处理请求的线程限制。您可以从ApacheBench向远程处理客户端发送1000个请求,但只能同时处理其中的100个请求。我怀疑这可能是一个原因

为了增加IIS的线程数,我建议您尝试:

  • 检查配置(请参见此)
  • 尝试在IIS上使用
    SetMinThreads
我这边的最后一点意见是,您必须记住,线程池中的线程数量太少或太多都不好。这两种情况都会影响性能。

您确定瓶颈是线程,而不是网络连接吗。。?默认情况下,.net每个远程IP的可用套接字数量相当有限。这适用于远程处理、http(WCF、web服务客户端)等

如果这是您看到的内容,您可以在应用程序config/web.config的system.net/connectionManagement下覆盖此内容,例如:

<configuration>
...
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="1000"/>
    </connectionManagement>
  </system.net>

...

我有几个问题。1.您使用哪种远程对象?单例、单次呼叫、客户端或服务器激活?2.我不确定我是否理解正确。线程数下降对您来说是个问题吗。3.您的机器有多少处理器/内核?4.您使用IIS托管远程处理对象对吗?5.为什么要有这么多线程?是否要提高性能?SingleCall。客户端已激活。16芯。IIS托管远程处理客户端。Windows服务承载远程处理服务器。我们希望提高性能,因为我们注意到一次只能通过远程处理管道压缩100个请求(即使这些请求只执行线程。另一端睡眠)。我想问另外两件事。1.您在远程处理服务器上使用
ThreadPool.SetMinThread
对吗?2.你是如何进行压力测试的?我想知道对服务器的请求是从IIS上托管的远程处理客户端发送的,还是从非IIS上托管的其他应用程序发送的?1)是的。2) 我们创建了一个远程服务器方法,它只需休眠10秒钟。然后,我们使用Apache Bench和1000个并发线程从远程处理客户端调用此方法(因此IIS是远程处理客户端)。之后我们还调用了GetMinThreads,以确认我们将min线程设置为我们所期望的。看来远程处理实际上并没有使用ThreadPool来管理它的线程。。。