网站迁移建设方案,新网站注册,专业的单位网站建设,标志空间 网站.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制#xff0c;这个限制在桌面操作系统如 windows xp , windows 7 下默认是2#xff0c;在服务器操作系统上默认为10. 如果不修改这个并发连接限制#xff0c;那么客户端同时可以建立的 http 连接数就只有….net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制这个限制在桌面操作系统如 windows xp , windows 7 下默认是2在服务器操作系统上默认为10. 如果不修改这个并发连接限制那么客户端同时可以建立的 http 连接数就只有2个或10个。对于一些诸如浏览器或网络蜘蛛的应用2个或10个并发数量实在太少大大影响应用的性能。之所以有这个并发连接限制是因为 http 1.0 和 http 1.1 标准规定并发连接数最大为2. 不过目前主流的浏览器都已经不遵循这个规则了但 .net framework 依然默认遵循这个规则。很多文章说用异步方式访问 HttpWebRequest 可以提高并发性能但我测试下来如果不修改这个默认并发连接数同步或异步方式访问性能都很不好。调整这个默认并发连接限制的方法很简单只要在程序中设置System.Net.ServicePointManager.DefaultConnectionLimit 512;这个值最好不要超过1024。我们也可以在app.config 中对最大并发连接数进行设置方法如下configurationsystem.netconnectionManagementaddaddress http://www.google.commaxconnection 512/addaddress http://192.168.1.14:8082/maxconnection 512/除 80 之外的端口上承载的应用程序时该参数必须在 URI 中包含非标准的端口addaddress *maxconnection 512//connectionManagement/system.net/configuration修改了这个设置后并发性能明显提高从原来每秒钟20次直接上升到每秒钟1000多次。[转]关于HTTP服务器每个客户端2个连接的限制这两天猫在家里搞一个多线程的断点续传得C#程序发现同时只能开2个线程下载其他的线程一律要等待这样就导致下载大文件时其他线程经常超时郁闷好久。今天回公司无意中发现了一个帖子终于真相大白了 现摘录如下 这几天在做IIS 6上Web Service (WSE 2.0)的性能测试。在这个过程中陆续发现和解决了一些问题。其中有一个问题比较有意思。我和项目组的同事发现不论我们用C#写的模拟客户端用多少并发量来连接Web Service服务器端监测到的并发连接数性能记数器中的Web Service\Current Connections总是每客户端最高2个。这使得我们无法查看服务器在大并发量下的真切反应。 那么为什么服务器会对每客户端做出最高2个并发量的限制呢 通过查找资料我找到了问题的根源。原来在HTTP 1.1 Spec中针对Persistent Connections提出了这样的Practical considerations Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion. 以上内容表明为了提高HTTP响应时间以及避免产生网络堵塞HTTP连接中的客户端不应该与服务器端建立超过2个的HTTP连接。如果有更多的请求需 要那么这些请求将被pipeline到这两个HTTP连接之中并以异步的方式传送给服务器端。举个例子有上百辆汽车requests想从天津开 往北京但是天津与北京之间最多只允许修建两条公路HTTP connection因此这些汽车要想从天津驶往北京的话就只能走这两条公路。 但是有时的确需要突破这样的限制。比如我一开始提到的性能测试我需要用尽可能少的客户端程序来模拟尽可能多的用户访问而不能为了模拟1000个并发量同时使用500台机器来测。那么应该怎样通过一个测试应用程序来产生指定的并发数量呢 不难看出为了提高单一测试应用程序所产生的并发量就应该增加两个指标网络客户端数量和单一客户端的HTTP连接数量。就我所知可以通过以下两种方法来分别提高这两个指标。方法一使用AppDomain 在. NET中一个AppDomain就被视为网络连接中的一个客户端因此如果希望用一个测试应用程序模拟多个客户端那么只须创建多个AppDomain 即可。需要注意的是对于每一个AppDomain最高2个的连接限额仍然存在不同之处只是我们可以使用一个测试应用程序发送超过2个的并发请求了 现在为了模拟1000个并发量就不需要找500台测试机器了。请看下面的代码AppDomain appDomain AppDomain.CreateDomain();appDomain.ExecuteAssembly(TestClient.exe);AppDomain.Unload(appDomain); 在这里我通过调用AppDomain的静态方法CreateDomain创建了一个新的应用程序域并要求该应用程序域执行一个应用程序 TestClient.exe。该应用程序将负责向服务器发送请求最多只能建立两个连接。你可以通过多线程的方式来驱动上述代码使得大量应用程序域 在近乎相同的时间里被创建从而就可以模拟指定数量的客户端并产生所希望的并发访问量。方法二使用配置文件 除了增加客户端数量以外我们还可以增加单一客户端所能建立的HTTP连接数量。在.NET中实现这一目标非常容易只需要在客户端没错是客户端的配置文件中增加以下几行即可system.net connectionManagement add address* maxconnection100/ /connectionManagement/system.net 其中connectionManagement节点负责指定客户端与某一网络主机之间所能建立的最高连接数量。它在Machine.config文件中 的默认取值就是2。我们完全可以在应用程序级的配置文件中对这一限额做出更改。address属性表明该连接限额针对的是哪一个网络地址*表明所有的网 络主机如果写成addresswww.google.com就表明后面的maxconnection只适用于对google的访问。好了现在就可以根据自己的需要来更改配置了。如果你把maxconnection的取值改成了1000那么你的测试应用程序与服务器之间所能建立的最高连接数量就是测试用应用程序域的数量 * 1000测吧方法三ServicePointManager.DefaultConnectionLimit 1000;方法四protected override WebRequest GetWebRequest(Uri uri) { HttpWebRequest req (HttpWebRequest)base.GetWebRequest(uri); ServicePoint currentServicePoint req.ServicePoint; currentServicePoint.ConnectionLimit 1000; return req; }