我希望只获取一点点代码就中断,释放对象资源。可是实现吗?我之前写的函数,总是获取全部的代码,碰到大的网页,就很慢。
解决方案 »
- 如何在注册后清空textbox中的信息以及无刷新页面的问题
- 关于GridView中的一个问题.
- 有人研究过ASP.NET下基于O/R mapping的表格控件吗?
- 我是菜鸟,新手,谁能推荐几本书给我!
- DataTable 排序后绑定问题
- C#.NET的DataGrid分页如何实现前后翻10页
- 怎么判断某个session变量已经失效了?
- xslt转换中 取 text() 中 带'\n' 如何过虑
- Response.Write得问题
- 有没有办法控制“RegisterClientScriptBlock”的注册顺序
- 在数据库中的值是0 or 1,如何在gridview中使其变为“未读”和“已读”
- 老生长谈,如何合理选择数据分页方式,
Range: bytes=起始位置 - 终止位置
req.AddRange(500);//只请求500字节。
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
Stream s = res.GetResponseStream();
Encoding encode = Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(s, encode);Response.Write(Server.HtmlEncode(sr.ReadToEnd()));
sr.Close();
res.Close();------------------------------结果似乎不对,还是全部读取出来了。慢~
/// 文件下载
/// </summary>
/// <param name="url">连接</param>
/// <param name="fileName">本地保存文件名</param>
/// <param name="progressBar">进度条</param>
/// <param name="label">返回已经下载的百分比</param>
public void httpDownFile(string url,string fileName,System.Windows.Forms.ProgressBar progressBar,Label label)
{
stopDown=false;
Stream str=null,fs=null;
try
{
//获取下载文件长度
fileLength=getDownLength(url);
downLength=0;
if(fileLength>0)
{
WebClient DownFile=new WebClient();
str =DownFile.OpenRead(url);
//判断并建立文件
if(createFile(fileName))
{
byte[] mbyte = new byte[1024];
int readL=str.Read(mbyte,0,1024);
fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.Write);
//读取流
while(readL!=0)
// while(readL<1024)
{
if(stopDown)
break;
downLength+=readL;//已经下载大小
if (downLength>1024)//--------------------关键是这个,读取到N字节就停止了读取。
{
break;
}
fs.Write(mbyte,0,readL);//写文件
readL=str.Read(mbyte,0,1024);//读流
progressBar.Value=(int)(downLength*100/fileLength);
label.Text=progressBar.Value.ToString()+"%";
System.Windows.Forms.Application.DoEvents();
}
str.Close();
fs.Close();
}
}
}
catch(Exception ex)
{
if(str!=null)
str.Close();
if(fs!=null)
fs.Close();
// MessageBox.Show(ex.Message);
}
}
byte[] mbyte = new byte[1024];
int readL = str.Read(mbyte, 0, 1024);
根据readL模拟的进度,判断实际进度
这样模拟的,准确么?
byte[] mbyte = new byte[1024];
这是一个缓冲字符数组。高明。我去try一把。
--------------------------
如是同步(不开新线程)的,那在读openRead方法完成之前(获取到网页全部的代码),Stream是不能打开的?这样的话,就不能满足我的 【只读取部分代码就中断】 的要求。
因为这个Steam还是读完了所有网页代码,碰到大网页仍然很慢。