C# 每次连接到ASP.net应用程序时,是否都会创建一个新线程?

C# 每次连接到ASP.net应用程序时,是否都会创建一个新线程?,c#,asp.net,multithreading,tcp,C#,Asp.net,Multithreading,Tcp,情况: 我的ASP.net应用程序通过TCP连接连接到另一个系统以获取信息 我试图模拟100个人坐着&同时登录到我的ASP.net应用程序并连接到TCP连接 创建一个有100个线程试图连接到TCP连接的windows应用程序会提供正确的模拟/精确的结果吗 或 ASP.net是否以不同的方式处理不同的实例 ASP.NET有一个工作线程池,它将分配给新请求,直到池用完。然后,请求将排队等待,直到工作线程通过以某种方式结束的前一个请求返回到池中 默认情况下,我相信有20个可用。Microsoft建议的

情况: 我的ASP.net应用程序通过TCP连接连接到另一个系统以获取信息

我试图模拟100个人坐着&同时登录到我的ASP.net应用程序并连接到TCP连接

创建一个有100个线程试图连接到TCP连接的windows应用程序会提供正确的模拟/精确的结果吗


ASP.net是否以不同的方式处理不同的实例

ASP.NET有一个工作线程池,它将分配给新请求,直到池用完。然后,请求将排队等待,直到工作线程通过以某种方式结束的前一个请求返回到池中

默认情况下,我相信有20个可用。Microsoft建议的最大值为100


因此,为了回答您的问题-如果这样配置,您的web应用程序可能会有大约100个线程同时发出TCP请求,尽管请注意,实际的TCP操作是在I/O线程上完成的,因此,从技术上讲,连接到目标的线程的实际数量可能会稍微少一些。

ASP.NET有一个工作线程池,它将分配给新请求,直到该池用完为止。然后,请求将排队等待,直到工作线程通过以某种方式结束的前一个请求返回到池中

默认情况下,我相信有20个可用。Microsoft建议的最大值为100

因此,为了回答您的问题,如果这样配置,您的web应用程序可能会有大约100个线程同时发出TCP请求,尽管请注意,实际的TCP操作是在I/O线程上完成的,因此从技术上讲,连接到目标的实际线程数可能会稍微少一些

是否为每个asp.net请求创建新线程

我对请求管道的理解并不完美,因此这可能不是100%准确。但据我所知,并非每次都会创建一个新线程。它使用一个线程池,因此您可能会重复使用以前请求中的线程,或者您甚至可能需要等待几毫秒才能获得池中的线程。因此,如果池未满,将创建一个新线程

是否为每个asp.net请求创建新线程


我对请求管道的理解并不完美,因此这可能不是100%准确。但据我所知,并非每次都会创建一个新线程。它使用一个线程池,因此您可能会重复使用以前请求中的线程,或者您甚至可能需要等待几毫秒才能获得池中的线程。因此,如果池未满,将创建一个新线程

如果您正在编写应用程序以使用.NET 3.5 SP1测试负载,并且正在使用HttpWebRequest点击页面进行测试,请确保在app.config中包含设置,以将单个web服务器的并发连接限制提高到默认值2之外。这就是说,您可能需要从多台机器上访问web服务器,以产生可观的负载量,从而真正测试服务器容量

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

正如上面其他人所说,请确保ASP.NET网站的线程限制也设置得同样高。

如果您正在编写一个应用程序,使用.NET 3.5 SP1测试负载,并使用HttpWebRequest点击页面进行测试,确保在app.config中包含这些设置,以将单个web服务器的并发连接限制提高到默认值2之外。这就是说,您可能需要从多台机器上访问web服务器,以产生可观的负载量,从而真正测试服务器容量

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

正如其他人所说的那样,确保你对ASP.NET网站的限制也同样高。

还有很多其他的因素你还需要考虑。在其他因素中,使用一台机器调用应用程序不会考虑网络延迟。我会考虑使用测试框架(如VisualStudio为测试人员、LoadRunner或类似的负载测试软件)。还有许多其他因素,您也需要考虑。在其他因素中,使用一台机器调用应用程序不会考虑网络延迟。我会考虑使用测试框架,如VisualStudio为测试器、LoadRunner或类似的负载测试软件。