我们一次可以运行的最大控制台数

时间:2010-07-22 07:10:26

标签: c#

两个问题:

  1. 只是想知道我们可以产生的最大控制台数量是否有限制。

  2. 我们有一个场景,我们想在互联网上下载一堆文件。 虽然我们可以使用线程来对每个文件进行下载,但据我所知,下载的线程数限制为2个,我们正在考虑生成多个控制台并在内部创建线程并一次下载多个文件。

  3. 只是想知道其他人的想法。 感谢

5 个答案:

答案 0 :(得分:4)

可以在app.config的<connectionManager>元素中更改可以对同一服务器进行的同时HTTP连接的数量。这将是一个更好的解决方案,而不是试图通过产卵来解决它......尽管你仍然应该明智地限制自己。

例如:

<configuration>
  <system.net>
    <connectionManagement>
      <!-- Increase the number of concurrent connections per server to 8. -->
      <add address = "*" maxconnection = "8" />
    </connectionManagement>
  </system.net>
</configuration>

另请注意,这是基于每个目标地址的基础......如果您尝试从20个不同的网站下载,则无论如何都不会达到限制(尽管您可能已经用完了)带宽)。

答案 1 :(得分:4)

虽然根据最大手柄数等,您可以打开的控制台/进程数量存在理论上的限制......但它非常高并且您不太可能达到它。

请注意,您实际上可以增加允许的连接数 - 默认情况下它只是设置为2:

ServicePointManager.DefaultConnectionLimit = myLimit;

blog article也可能对您有所帮助。

答案 2 :(得分:3)

您可以扩展WebClient类以覆盖服务点上的连接限制。这将无需生成应用程序的多个实例:

public class MyWebClient : WebClient 
{
    protected override WebRequest GetWebRequest(Uri address) {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
        req.ServicePoint.ConnectionLimit = 50;
        return (WebRequest)req;
    }
}

答案 3 :(得分:-1)

主要取决于您的RAM数量;)

答案 4 :(得分:-1)

首先,我认为控制台只是操作系统的另一个应用程序,所以它实际上受到内存(RAM)限制的限制。