none
NET 获取在线XML信息太慢 RRS feed

  • 问题

  • 现在有一个应用从网络上公开的API中收集xml数据,
    然后处理,比如:http://open.client.lashou.com/v1/hao123

    我使用如下代码获取XML:
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(apiUrl);
          webRequest.Timeout = 5 * 1000;
    
          HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
          StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
          string xmlStr = streamReader.ReadToEnd();
    
          XmlDocument xmlDocument = new XmlDocument();
          xmlDocument.LoadXml(xmlStr);
    
          webResponse.Close();
          streamReader.Close();
    
    
    
    但有时获取一个网站的xml文件需要大概1分多钟,而有时却只有2秒钟左右
    
    经过测试程序在
    string xmlStr = streamReader.ReadToEnd();
    
    这句话这里用的时间较多,卡也卡在这里!

    应该是从网络上下载数据太慢造成的...
    有什么方法可以设置获取响应数据的超时时间???
    2011年3月2日 7:57

答案

  • 既然你要用XmlDocument,就不要先用 StreamReader.ReadToEnd()了。

    请从 webResponse中创建 XmlReader,然后传递给 XmlDocument,

    或者传递给 DataSet。

    • 已标记为答案 紫柔 2011年3月30日 12:18
    2011年3月27日 9:27

全部回复

  • 个人意见: 1)桌面的尝试采用ReadLine方法逐行读取,然后显示。 2)网页版关于超时的解决办法,可以的话建议你使用jQuery或者类似的WebService,进行异步xml读取解析,这样可以使用jQuery的“beforeSend“事件在页面上显示“请稍候……”之类的话,然后在complete事件中去读xml并且显示到网页上。
    2011年3月4日 1:44
  • 你是.net 4吗
    【孟子E章】
    2011年3月7日 13:13
    版主
  • 既然你要用XmlDocument,就不要先用 StreamReader.ReadToEnd()了。

    请从 webResponse中创建 XmlReader,然后传递给 XmlDocument,

    或者传递给 DataSet。

    • 已标记为答案 紫柔 2011年3月30日 12:18
    2011年3月27日 9:27