HttpWebRequest的效率问题 反复用到HttpWebRequest来获取网页源码(多线程的) 要怎么优化代码或有什么好的方法来提高访问速度... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 听说可以在提交前的HttpWebRequest对像中的头加入( "Accept-Encoding ", "gzip "); 然后在解密 具体代码要怎么写呢 这个不是 Socket效率问题 不是这样考虑的 +1还有这个是在网上获取的``是在IE里面啊 代码再牛网速慢如牛你也没办法HttpWebRequest只是一个方法~ 你调用而已,如果你真想让这个方法少占点内存你看看它是从哪里派生出来的` 基类是什么`然后再想办法吧 给你一个多线程的版本的,不卡ui界面:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Net;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Threading;namespace test{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private static string str_url = string.Empty; public delegate void SetTextHandler(string text); private void toolStripButton1_Click(object sender, EventArgs e) { if (toolStripTextBox1.Text.Length > 0) { str_url = toolStripTextBox1.Text.Trim(); ParameterizedThreadStart ParStart = new ParameterizedThreadStart(GetPageSource); Thread myThread = new Thread(ParStart); //是否背景线程根据自己需要加,加上后理论上不影响界面的操作,就是不卡 myThread.IsBackground = true; object o = str_url; myThread.Start(o); //GetPageSource(toolStripTextBox1.Text.ToString().Trim()); } } private void GetPageSource(object url) { Uri uri = new Uri(url.ToString()); HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(uri); HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse(); hwReq.Method = "Get"; hwReq.KeepAlive = false; //从输入的网站提取HTML源码 StreamReader reader = new StreamReader(hwRes.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312")); settext(reader.ReadToEnd()); } private void settext(string text) { if (richTextBox1.InvokeRequired == true) { SetTextHandler set = new SetTextHandler(settext); richTextBox1.Invoke(set, new object[] { text }); } else { richTextBox1.Text = text; } } }} //在初始化方法设置以下相关属性. //对象所允许的最大并发连接数//可在配置文件中设置 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 用于提高效率获取网页源代码的 相关设置. (省略了其他代码..) service unavailable 错误 向大家请教一个递归的问题, 初步写了一些出来,功能不全, 麻烦大家帮看一下 急救站! 超无敌ComBoBox带源码改良版 关于 VS工具插件 【急救!】如何实现多个ListView中的同一行的定位显示? 赐我正确的正则表达式 值类型变量,如何保证线程安全? 冒泡排序 基于三层的应用程序框架该如何架设(用类实现)问题多多? 字符中含有某字符的判断条件怎么写? C#调用Delphi dll
然后在解密 具体代码要怎么写呢
还有这个是在网上获取的``是在IE里面啊 代码再牛网速慢如牛你也没办法
HttpWebRequest只是一个方法~ 你调用而已,如果你真想让这个方法少占点内存
你看看它是从哪里派生出来的` 基类是什么`然后再想办法吧
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Net;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private static string str_url = string.Empty;
public delegate void SetTextHandler(string text);
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (toolStripTextBox1.Text.Length > 0)
{
str_url = toolStripTextBox1.Text.Trim();
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(GetPageSource);
Thread myThread = new Thread(ParStart);
//是否背景线程根据自己需要加,加上后理论上不影响界面的操作,就是不卡
myThread.IsBackground = true;
object o = str_url;
myThread.Start(o);
//GetPageSource(toolStripTextBox1.Text.ToString().Trim());
}
} private void GetPageSource(object url)
{
Uri uri = new Uri(url.ToString());
HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse(); hwReq.Method = "Get"; hwReq.KeepAlive = false; //从输入的网站提取HTML源码
StreamReader reader = new StreamReader(hwRes.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));
settext(reader.ReadToEnd());
}
private void settext(string text)
{
if (richTextBox1.InvokeRequired == true)
{
SetTextHandler set = new SetTextHandler(settext);
richTextBox1.Invoke(set, new object[] { text });
}
else
{
richTextBox1.Text = text;
} }
}
}
//在初始化方法设置以下相关属性.
//对象所允许的最大并发连接数//可在配置文件中设置
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 用于提高效率获取网页源代码的 相关设置. (省略了其他代码..)