c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter
1、XmlTextWriter 表示提供快速、非緩存、只進方法的編寫器,該方法生成包含 XML 數據(這些數據符合 W3C 可擴展標記語言 (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 之所以不產生內存溢出是因為它是以流的形式將數據寫入硬盤中的。
2、?我做了一個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();第一個正常顯示,第二個則出現內存溢出提示。所以在大數據量的時候。一定要寫成流的形式,這樣可以防止內存溢出。
3、由這件事情讓我想到好多
以前我們用.net寫輸出時,沒想過要將數據寫到硬盤。如果出現內存溢出就無計可施。其實我當時真的沒想過要講數據寫入硬盤嗎?錯了,我想到過。但是我馬上否定了我自己,總感覺這是不可能實現的事情。這就是思維限制。我的思維已經受限。后來我想.net其實它只是一個框架。凡是二進制匯編等能實現的事情,高級語言也是都能實現的。計算機無非就是一個二進制的運算。它可以將數據寫入內存,定然也可以將數據寫入硬盤。畢竟這種事情我們每天都在做。只是忽略了它。所以我要打破自己的思維限制,大膽設想!
轉載于:https://www.cnblogs.com/honghong75042/p/3303093.html
總結
以上是生活随笔為你收集整理的c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2理解——转发和重定向
- 下一篇: c# in deep 之Lambda表达