激情五月天婷婷,亚洲愉拍一区二区三区,日韩视频一区,a√天堂中文官网8

<ul id="buwfs"><strike id="buwfs"><strong id="buwfs"></strong></strike></ul>
    <output id="buwfs"></output>
  • <dfn id="buwfs"><source id="buwfs"></source></dfn>
      <dfn id="buwfs"><td id="buwfs"></td></dfn>
      <div id="buwfs"><small id="buwfs"></small></div>
      <dfn id="buwfs"><source id="buwfs"></source></dfn>
      1. <dfn id="buwfs"><td id="buwfs"></td></dfn>
        始創(chuàng)于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業(yè)
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        XML數據讀取方式性能比較

        發(fā)布時間:  2012/8/20 17:49:28

        幾個月來,疑被SOA,一直在和xml操作打交道,SQL差不多又忘光了,F在已經知道,至少有四種常用人XML數據操作方式(好像java差不多),不過還沒有實際比較過這些方式各有哪些特點或優(yōu)劣。正好看到網上也沒有這方面的實驗,偶來總結一下。

        測試開始先讀取XML源,用一個比較大的rss文件鏈接,復制到項目bin/debug目錄下。

        1. Stream xmlStream = new MemoryStream(File.ReadAllBytes(path)); 

        一、XmlDocument 方式

        代碼 

        1. static IList testXmlDocument()   
        2. {   
        3. var doc = new XmlDocument();   
        4. doc.Load(xmlStream);   
        5. var nodeList = doc.DocumentElement.ChildNodes;   
        6. var lstChannel = new List<Object>(nodeList.Count );   
        7. foreach (XmlNode node in nodeList)   
        8. {   
        9. var channel = new 
        10. {  
        11. Title = node.SelectSingleNode("title").InnerText,  
        12. Link = node.SelectSingleNode("link").InnerText,  
        13. Description = node.SelectSingleNode("description").InnerText,  
        14. Content = node.SelectSingleNode("content").InnerText,  
        15. PubDate = node.SelectSingleNode("pubDate").InnerText,  
        16. Author = node.SelectSingleNode("author").InnerText,  
        17. Category = node.SelectSingleNode("category").InnerText  
        18. };  
        19. lstChannel.Add(channel);  
        20. }   
        21. return lstChannel;  
        22. }  

        二、XPathNavigator 方式

        代碼 

        1. static IList testXmlNavigator()   
        2. {   
        3. var doc = new XmlDocument();   
        4. doc.Load(xmlStream);    
        5. var nav = doc.CreateNavigator();   
        6. nav.MoveToRoot();   
        7. var nodeList = nav.Select("/channel/item");   
        8. var lstChannel = new List<Object>(nodeList.Count);   
        9. foreach (XPathNavigator node in nodeList)  
        10. {  
        11. var channel = new 
        12. {  
        13. Title = node.SelectSingleNode("title").Value,  
        14. Link = node.SelectSingleNode("link").Value,  
        15. Description = node.SelectSingleNode("description").Value,  
        16. Content = node.SelectSingleNode("content").Value,  
        17. PubDate = node.SelectSingleNode("pubDate").Value,  
        18. Author = node.SelectSingleNode("author").Value,  
        19. Category = node.SelectSingleNode("category").Value  
        20. };  
        21. lstChannel.Add(channel);  
        22. }  
        23. return lstChannel;  
        24. }  

        三、XmlTextReader 方式

        代碼 

        1. static List<Channel> testXmlReader()  
        2. {   
        3. var lstChannel = new List<Channel>();   
        4. var reader = XmlReader.Create(xmlStream);   
        5. while (reader.Read())   
        6.  {   
        7. if (reader.Name == "item" && reader.NodeType == XmlNodeType.Element)   
        8.  {  var channel = new Channel();  
        9. lstChannel.Add(channel);  
        10.  while (reader.Read())  
        11.  {  
        12.  if (reader.Name == "item") break;  
        13.  if (reader.NodeType != XmlNodeType.Element) continue;  
        14.  switch (reader.Name)  
        15.  {  
        16.  case "title":  
        17.  channel.Title = reader.ReadString();  
        18. break;  
        19. case "link":  
        20. channel.Link = reader.ReadString();  
        21. break;  
        22.  case "description":  
        23. channel.Description = reader.ReadString();  
        24. break;  
        25. case "content":  
        26. channel.Content = reader.ReadString();  
        27. break;  
        28.  case "pubDate":  
        29.  channel.PubDate = reader.ReadString();  
        30.  break;  
        31.  case "author":  
        32. channel.Author = reader.ReadString();  
        33.  break;  
        34. case "category":  
        35. channel.Category = reader.ReadString();  
        36.  break;  
        37. default:  
        38. break;  
        39. }}}}  
        40. return lstChannel;  
        41. }  

        四、Linq to XML 方式

        代碼 

        1. static IList testXmlLinq()  
        2. {   
        3. var xd = XDocument.Load(xmlStream);   
        4. var list = from node in xd.Elements("channel").Descendants("item")   
        5. select new   
        6. {   
        7. Title = node.Element("title").Value,   
        8. Link = node.Element("link").Value,   
        9. Description = node.Element("description").Value,  
        10. Content = node.Element("content").Value,  
        11. PubDate = node.Element("pubDate").Value,  
        12. Author = node.Element("author").Value,  
        13. Category = node.Element("category").Value  
        14. };  
        15. return list.ToList();  

        測試結果:

        XmlDocment 47ms 

        XPathNavigator 42ms

        XmlTextReader 23ms

        Xml Linq 28ms

        小結一下自己的認識,XmlDocument的操作基本按W3C的DOM操作方式,不過要將全部節(jié)點解析成對象加載到內存中,往往造成很大浪費。所以微軟自己的編程規(guī)范也不推薦用它。這里由于讀取了所有節(jié)點,可能因此性能和Navigator方式相差不大。在三種隨機讀取方式中,Xml Linq性能最高,只是方法名有點別扭。XmlTextReader方式是所謂的SAX,只讀向前,無疑性能最高,不過實現上麻煩了不少,要比較精確的控制訪問邏輯,也無法用匿名類存儲數據。

        .Net 3.5發(fā)布Xml Linq可以很好地取代前兩種方式,通常情況下,最好用它。只有個別場合,如果對性能要求極高,或者讀取Xml數據量太大不能一下子下載或讀取到內存中,那就只好痛苦委身于XmlTextReader了。


        本文出自:億恩科技【mszdt.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      2. 您可能在找
      3. 億恩北京公司:
      4. 經營性ICP/ISP證:京B2-20150015
      5. 億恩鄭州公司:
      6. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      7. 億恩南昌公司:
      8. 經營性ICP/ISP證:贛B2-20080012
      9. 服務器/云主機 24小時售后服務電話:0371-60135900
      10. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      11. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線