c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter
1、XmlTextWriter 表示提供快速、非緩存、只進(jìn)方法的編寫器,該方法生成包含 XML 數(shù)據(jù)(這些數(shù)據(jù)符合 W3C 可擴(kuò)展標(biāo)記語言 (XML) 1.0 和“XML 中的命名空間”建議)的流或文件。
public class XmlTextWriter : XmlWriter XmlTextWriter繼承抽象類 XmlWriter
XmlTextWriter 小例子:
string resultFileName = "c:/44.txt";if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(resultFileName))){System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(resultFileName));}XmlTextWriter result = new XmlTextWriter(resultFileName, null);result.Formatting = Formatting.Indented;result.WriteStartElement("PolicyList");result.WriteStartElement("Policy");result.WriteAttributeString("username", "USERNAME"+i.ToString());result.WriteEndElement();result.WriteEndElement();result.Close();?
?XmlTextWriter 之所以不產(chǎn)生內(nèi)存溢出是因?yàn)樗且粤鞯男问綄?shù)據(jù)寫入硬盤中的。
2、?我做了一個(gè)XmlTextWriter 與普通拼接字符的形式對比:
XmlTextWriter
?
string resultFileName = "c:/44.txt";if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(resultFileName))){System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(resultFileName));}XmlTextWriter result = new XmlTextWriter(resultFileName, null);result.Formatting = Formatting.Indented;result.WriteStartElement("PolicyList");for (int i = 0; i < 100000000; i++){result.WriteStartElement("Policy");result.WriteAttributeString("username", "USERNAME"+i.ToString());result.WriteEndElement();}result.WriteEndElement();result.Close();普通:
?
XmlDocument xmlD = new XmlDocument();StringBuilder sb = new StringBuilder();for (int i = 0; i < 100000000; i++){sb.Append("<PolicyList username='USERNAME"+i.ToString()+"' />");}xmlD.LoadXml(sb.ToString());StreamWriter sw = new StreamWriter("c:/55.txt");sw.Write("www");sw.Close();第一個(gè)正常顯示,第二個(gè)則出現(xiàn)內(nèi)存溢出提示。所以在大數(shù)據(jù)量的時(shí)候。一定要寫成流的形式,這樣可以防止內(nèi)存溢出。
3、由這件事情讓我想到好多
以前我們用.net寫輸出時(shí),沒想過要將數(shù)據(jù)寫到硬盤。如果出現(xiàn)內(nèi)存溢出就無計(jì)可施。其實(shí)我當(dāng)時(shí)真的沒想過要講數(shù)據(jù)寫入硬盤嗎?錯(cuò)了,我想到過。但是我馬上否定了我自己,總感覺這是不可能實(shí)現(xiàn)的事情。這就是思維限制。我的思維已經(jīng)受限。后來我想.net其實(shí)它只是一個(gè)框架。凡是二進(jìn)制匯編等能實(shí)現(xiàn)的事情,高級語言也是都能實(shí)現(xiàn)的。計(jì)算機(jī)無非就是一個(gè)二進(jìn)制的運(yùn)算。它可以將數(shù)據(jù)寫入內(nèi)存,定然也可以將數(shù)據(jù)寫入硬盤。畢竟這種事情我們每天都在做。只是忽略了它。所以我要打破自己的思維限制,大膽設(shè)想!
轉(zhuǎn)載于:https://www.cnblogs.com/honghong75042/p/3303093.html
總結(jié)
以上是生活随笔為你收集整理的c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2理解——转发和重定向
- 下一篇: 约瑟夫问题(丢手帕问题)的java实现