无码视频在线观看,99人妻,国产午夜视频,久久久久国产一级毛片高清版新婚

  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補(bǔ)償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

    XML數(shù)據(jù)讀取方式性能比較

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

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

    測試開始先讀取XML源,用一個(gè)比較大的rss文件鏈接,復(fù)制到項(xiàng)目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();  

    測試結(jié)果:

    XmlDocment 47ms 

    XPathNavigator 42ms

    XmlTextReader 23ms

    Xml Linq 28ms

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

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


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

    服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

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

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線