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其實它只是一個框架。凡是二進制匯編等能實現的事情,高級語言也是都能實現的。計算機無非就是一個二進制的運算。它可以將數據寫入內存,定然也可以將數據寫入硬盤。畢竟這種事情我們每天都在做。只是忽略了它。所以我要打破自己的思維限制,大膽設想!