![](/img/trans.png)
[英]Read single large file containing multiple XML files into multiple xml records in C#
[英]Read/Write Large XML Files in C#
我正在使用XML數據庫開發應用程序。 我有很大的XML文件,必須在其中讀寫數據。 問題是由於性能問題,我不想將整個XML文件加載到內存中,也不想遍歷整個文件。 因為如果我將整個文件加載到內存中,這將影響應用程序性能,並且可能由於內存韭蔥而使應用程序崩潰。
我需要一種足夠的方法來將XML寫入和讀取到文件中,這不會影響性能和內存。
任何幫助將不勝感激。
如果這個XML決定不是您的決定,那么您就必須應對(請參閱整個MSDN示例http://msdn.microsoft.com/zh-cn/library/bb387013.aspx )
static IEnumerable<XElement> StreamCustomerItem(string uri)
{
using (XmlReader reader = XmlReader.Create(uri))
{
XElement name = null;
XElement item = null;
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
name = XElement.ReadFrom(reader) as XElement;
break;
}
}
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
item = XElement.ReadFrom(reader) as XElement;
if (item != null)
{
XElement tempRoot = new XElement("Root", new XElement(name));
tempRoot.Add(item);
yield return item;
}
}
}
}
}
}
}
但是,如果您控制決定,請您不要理會XML。 有多種選擇可以幫助您和您的應用程序正常運行,而不會帶來太多麻煩。
您甚至可以使用MySQL,MariaDB或任何類似的東西!
看看這個,它將為您提供有關快速讀取xml的一些想法。 http://msdn.microsoft.com/zh-CN/library/system.xml.xmltextreader.aspx
已經有一些關於在stackoverflow中寫入xml文件的線程。
但是,我認為如果您正在尋找非常好的性能,那么某些數據庫解決方案(例如sqlserver,mongodb)可能是一個更好的選擇
性能在一定程度上取決於您的應用程序所運行的.NET版本。 另一個快速參考是Microsoft模式和實踐文章 。
有4種方法:XMLDocument,XPathNavigator,XmlTextReader,Linq到XML,我認為它們之間的差異很有價值!
XmlDocument :
它代表XML文件的內容。 從文件加載文件時,您會將整個文件讀入內存。 一般來說,如果您使用的是XmlDocument,則XML解析會慢得多,而XmlDocument更適合於將整個DOM加載到RAM中……您的應用程序的內存消耗可能就像毛毛蟲的移動方式一樣!
使用DOM模型和XmlDocument或XPathDocument類來解析大型XML文檔可能對內存有很大的要求。 這些需求可能會嚴重限制服務器端Web應用程序的可伸縮性。
XPath或LINQ-To-XML :
如果您更關注性能,我個人不建議使用XPath或LINQ-To-XML查詢。 XPathNavigator提供了用於瀏覽和編輯XML數據的游標模型。
XmlReader :
與XmlDocument相比,它可能有助於獲得更好的性能。 正如其他人已經建議的那樣。 XmlReader是一個抽象類,並提供API用於XML數據流的快速,只讀,只讀解析……它可以從文件,互聯網位置或任何其他數據流中讀取。 從文件讀取時,您不會一次加載整個文檔。 這就是它的亮點。
XmlTextReader :XmlTextReader,是XmlReader的實現。 使用XmlTextReader以向前,只讀的方式快速處理XML數據,而無需使用驗證,XPath和XSLT服務。
EOL規范化始終在XmlReader.Create的XmlReader中啟用,這會影響XDocument。 默認情況下,XmlTextReader上的規范化處於關閉狀態,這會影響XmlDocument和XmlNodeReader。 可以通過Normalization屬性將其打開。
設計注意事項
基准測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.