2015-12-21 68 views
0

让我们假设我有20个url的列表中,任何人都可以帮助我在最短的时间内得到所有这20个url的响应[如重定向implimentation verifier]。验证重定向implimation

XmlNodeList lst = doc.SelectNodes("//match"); 
    for (int i = 0; i < lst.Count; i++) 
    { 
       XmlNode node = lst[i]; 
       string URL = lst[i].InnerText; 

       var request = (HttpWebRequest)WebRequest.Create(URL); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       string responseURI = response.ResponseUri.ToString(); 

       //XLWorkbook workbook = new XLWorkbook(); 
       //DataTable table = GetYourTable(); 
       //workbook.Worksheets.Add(table); 
    } 

以上方法花费太多时间,我不擅长“线程”概念,所以请帮助我。

回答

1

尝试Parallel.ForEach/For。

using System.Threading; 
using System.Threading.Tasks; 

Parallel.For(0, lst.Count, index => 
{ 
      string URL = lst[index].InnerText; 

      var request = (HttpWebRequest)WebRequest.Create(URL); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      string responseURI = response.ResponseUri.ToString(); 

}); 

https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx

foreach循环就像一个for循环。源收集分区为 ,并且基于 系统环境在多个线程上调度工作。并行方法运行的越快,系统上的处理器就越多。

您可以使用这两种填充列表与您回应并进一步proccess,或者如果你想要把在GUI上调用invoke()将UI控件来安排它在各自的消息循环。

备注:XmlNodeList公开一个枚举器,因此不需要[]运算符来访问它; foreach将为您提供所有的子元素。

编辑:看起来像C#不能解析XmlNodeList枚举器到XmlNode。我不知道为什么要诚实 - 但你可以使用Parallel.For代替

+0

嗨,猫头鹰,谢谢你的反应。但我越来越低于错误。请进一步指导我。 http://i.stack.imgur.com/uia6Z.png – vijay

+0

由于某种原因,Foreach似乎无法在XmlNodeList上工作。看我的编辑。 – srandppl

+0

谢谢Owlsolo,它的工作 – vijay