2013-02-04 91 views
-2

我需要讀取XML文件(大於1 GB大小)並將數據加載到數據庫中。如果我使用LINQ讀數會比使用XmlReader更快?使用LINQ進行C#XML讀取

+1

Google可以爲您解答該問題:http://www.nearinfinity.com/blogs/joe_ferner/performance_linq_to_sql_vs.html – randoms

回答

2

XDocument(LINQ to XML)和XmlDocument是針對較小的文件,它們是所謂的DOM解析器。原因是他們將完整的文檔加載到內存中並進行解析。

XmlReaderSAX parser並且適用於大文件,因爲只有小塊被讀取並且在讀取時檢查格式良好。

哪些文件算作「小」和「大」實際上取決於某些因素,如機器中安裝的內存。

一般來說,對於任何體面大小的XML文件,XmlReader應該是有關原始執行時間的最快解決方案,但它也是迄今爲止最難實施和理解的API。特別是對於使用此API的新手來說,實施時間明顯高於其他API。

0
public void validateIputXML(string inputXmlPath) 
    { 

     XmlDocument document = new XmlDocument(); 
     document.Load(inputXmlPath); 
     XmlNodeList recipientItem = document.GetElementsByTagName("RECIPIENT"); 
     foreach (XmlNode childList in recipientItem) 
     { 
      string attibuteValue_TemplateID = getValue(childList,".//LETTER_HEADER/TEMPLATE_ID"); 
      string attibuteValue_ProviderName = getValue(childList,".//LETTER_BODY/PROVIDER_INFO/PROVIDER_NAME"); 
      string attibuteValue_ProviderAddress = getValue(childList,".//LETTER_BODY/PROVIDER_INFO/PROVIDER_ADDRESS1"); 
      string attibuteValue_ProviderNumber = getValue(childList,".//LETTER_BODY/PROVIDER_INFO/PROVIDERNPI"); 

      Report.Info(attibuteValue_TemplateID+"-->"+attibuteValue_ProviderName+"-->"+attibuteValue_ProviderAddress+"-->"+attibuteValue_ProviderNumber); 
     } 
    } 


    public string getValue(XmlNode Xnode, string attributeName) 
    { 
     XmlNode innerNode = Xnode.SelectSingleNode(attributeName); 
     string attributeValue = innerNode.InnerText; 
     return attributeValue; 
    }