C# 下载文件超时
我正试图从网页上下载html,但我想在10秒钟后放弃。下面的代码可以很好地下载文本,但可能需要10秒以上的时间。我设置了超时,但流读取需要很长时间。在10秒后停止任何进一步处理,同时仍关闭连接的最佳方法是什么 如果req.GetResponse()花费的时间超过10秒,我会得到一个WebException,但是wr.GetResponseStream()读取需要时间。我还想确保所有连接都正确关闭 代码: 样本输出:C# 下载文件超时,c#,.net,httpwebrequest,C#,.net,Httpwebrequest,我正试图从网页上下载html,但我想在10秒钟后放弃。下面的代码可以很好地下载文本,但可能需要10秒以上的时间。我设置了超时,但流读取需要很长时间。在10秒后停止任何进一步处理,同时仍关闭连接的最佳方法是什么 如果req.GetResponse()花费的时间超过10秒,我会得到一个WebException,但是wr.GetResponseStream()读取需要时间。我还想确保所有连接都正确关闭 代码: 样本输出: A: 20:04:36:522 B: 20:04:36:522 C: 20
A: 20:04:36:522
B: 20:04:36:522
C: 20:04:54:337
Elapsed Time: ~18 Seconds
时间消耗在
ReadToEnd
使用
将count设置为4000,即使是最慢的连接也应该有足够的带宽,几乎可以在瞬间提供4000个字符或8kB
确保在每次读取之间增加缓冲区的索引,或者您可以使用8kB缓冲区,并在每次迭代中将其内容添加到动态缓冲区中
在循环中使用Read
检查时间,如果大于超时则退出,如果Read
返回的值小于count则退出
此外,您可能希望研究异步传输,这是从网络获取数据的正确方法:+1这正是我在阅读问题时所想的。使用缓冲区。这正是我最终要做的;谢谢,我现在发现关闭HttpWebRequest占用了大部分时间。我调用req.Abort(),需要5到20秒的时间。请不要在标题前加上“C:”之类的前缀。这就是标签的用途。
A: 20:04:36:522
B: 20:04:36:522
C: 20:04:54:337
Elapsed Time: ~18 Seconds
public virtual int Read(
char[] buffer,
int index,
int count
)