多线程httpWebRequest

//在初始化方法设置以下相关属性.
                //对象所允许的最大并发连接数//可在配置文件中设置
                System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
                //是否使用 Nagle 不使用 提高效率
                System.Net.ServicePointManager.UseNagleAlgorithm = false;
                //对象的最大空闲时间.(默认为100秒的)
                System.Net.ServicePointManager.MaxServicePointIdleTime = 3600 * 1000;
//-------------------------------------------------------------------------------------------
//在 while循环中的处理..
 while (!worker.CancellationPending)
{
                request = WebRequest.Create(userUrl) as HttpWebRequest;
                 request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
                request.Proxy = null;//
                request.KeepAlive = true;
                //数据是否缓冲 false 提高效率
                request.AllowWriteStreamBuffering = false;

                 Stream stream = null;
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                {
                    stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);
                }
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                {
                    stream = new DeflateStream(response.GetResponseStream(), CompressionMode.Decompress);
                }
                else
                {
                    stream = response.GetResponseStream();
                }
                using (stream)
                {
                    using (StreamReader sr = new StreamReader(stream, true))
                    {
                        string resultString = sr.ReadToEnd();
                    }

//-------------------------------------------------------------------------------------------

//使用完后要进行释放,否则易造成网络堵塞
                if (request != null)
                {
                    request.Abort();
                    request = null;
                }
                if (response != null)
                {
                    response.Close();
                    response = null;
                }
}

//在适当时间进行 强制垃圾回收.
System.GC.Collect();

//-------------------------------------------------------------------------------------------

//以上是总结的关于多线程使用 HttpWebRequest 用于提高效率获取网页源代码的 相关设置. (省略了其他代码..)
时间: 2024-11-06 01:22:34

多线程httpWebRequest的相关文章

C#多线程环境下调用 HttpWebRequest 并发连接限制

.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作系统上默认为10. 如果不修改这个并发连接限制,那么客户端同时可以建立的 http 连接数就只有2个或10个.对于一些诸如浏览器或网络蜘蛛的应用,2个或10个并发数量实在太少,大大影响应用的性能.之所以有这个并发连接限制,是因为 http 1.0 和 http 1.1 标准规定并发连接数最大为2. 不

HttpWebRequest多线程抓取17Track的物流信息

公司的一个系统需要去抓17Track的物流信息,贴上代码有需要的朋友可以参考一下↓ //17Track的抓取地址以及开启的线程数量 <add key="url" value="http://www.17track.net/restapi/handlertrack.ashx"/> <add key="threadCount" value="3"/> //使用HttpWebRequest去请求private

多线程环境下调用 HttpWebRequest 并发连接限制

.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows  7 下默认是2,在服务器操作系统上默认为10. 如果不修改这个并发连接限制,那么客户端同时可以建立的 http 连接数就只有2个或10个.对于一些诸如浏览器或网络蜘蛛的应用,2个或10个并发数量实在太少,大大影响应用的性能.之所以有这个并发连接限制,是因为 http 1.0 和 http 1.1 标准规定并发连接数最大为2.

使用C# HttpWebRequest进行多线程网页提交

使用线程池并发处理request请求及错误重试,使用委托处理UI界面输出. http://www.cnblogs.com/Charltsing/p/httpwebrequest.html for (int j = 0; j < _userlist.Count; j++) { user = _userlist[j]; if (user.Length == 0) continue; for (int k = 0; k < _passwordlist.Count; k++) { password =

C#综合揭秘——细说多线程(下)

引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽量降低IIS的压力.并行编程是Framework4.0中极力推广的

C# 多线程

引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽可能地减少IIS的压力.并行编程是Framework4.0中极力推

【编写高质量代码C#】建议71:区分异步和多线程应用场景

1.在获取网页内容的时候,可能由于网络不好,获取时间会很长,这时候我们一般会使用新建一个线程去获取,这样在获取网页的这段时间中,主线程就不会阻滞了. private void btnGetPage_Click(object sender, EventArgs e) { Thread th = new Thread(() => { //没有下面这一行会报线程无效的异常 //设置是否捕获对错误线程的调用,调用时会访问应用程序空间的属性 Control.CheckForIllegalCrossThre

[原]unity3d之http多线程异步资源下载

郑重声明:转载请注明出处 U_探索 本文诞生于乐元素面试过程,被面试官问到AssetBundle多线程异步下载时,愣了半天,同样也被深深的鄙视一回(做了3年多u3d 这个都没用过),所以发誓要实现出来填补一下自己的空白,同时分享给大家.说明:本人只在pc和Android下测试好使,其他平台未知! 直接贴代码,都是C# http的API,不懂得自己百科. using UnityEngine; using System.Collections; using System; using System.

多线程和异步编程示例和实践-踩过的坑

上两篇文章,主要介绍了Thread.ThreadPool和TPL 多线程异步编程示例和实践-Thread和ThreadPool 多线程异步编程示例和实践-Task 本文中,分享两则我们在做多线程和异步编程中实际踩过的坑,实际生产环境遇到的问题,以及解决办法. 1. HttpClient 业务场景:使用HttpClient实现第三方业务推送,当第三方的Http服务器不通.或者返回很慢时 线程数暴涨 Asp.Net\Asp.Net MVC场景下,并发多线程导致的线程阻塞:HttpClient.Pos