2011-05-27 62 views
0

我想創建一個C#控制檯應用程序來獲得大約1000000行數據。如何獲取1000000條記錄並將xml訂閱源寫入文件?

在代碼中添加一些過濾邏輯並生成XML feed。

我正在使用的那個工作正常,但對於250K行的數據,比我的內存異常異常。

以下是我在Web應用程序中使用的代碼示例,我需要將其更改爲控制檯應用程序並使其高效。

var xrFeed = new XmlTextWriter(File.Create(@"c:\Items.xml"), Encoding.UTF8); 

xrFeed.WriteStartDocument(); 
xrFeed.WriteStartElement("Name"); 

IEnumerable<ItemClass> items = _source.GetItems(); 

if (items != null) 
{ 
    foreach (var i in items) 
    {      
     xrFeed.WriteStartElement("ad"); 

      xrFeed.WriteStartElement("id"); 
      xrFeed.WriteCData(m.ListingId.ToString()); 
      xrFeed.WriteEndElement(); 

      xrFeed.WriteStartElement("firstParameter"); 
      xrFeed.WriteCData("parameter"); 
      xrFeed.WriteEndElement(); 

      xrFeed.WriteStartElement("secondParameter"); 
      xrFeed.WriteCData("parameter2"); 
      xrFeed.WriteEndElement(); 

      xrFeed.WriteStartElement("thirdParameter"); 
      xrFeed.WriteCData("parameter3"); 
      xrFeed.WriteEndElement(); 

     xrFeed.WriteEndElement(); 
    } 

    xrFeed.WriteEndElement(); 
    xrFeed.WriteEndDocument(); 

    xrFeed.Flush(); 
    xrFeed.Close(); 

    Response.End(); 
    DataBind();   
} 
+1

嘗試在foreach循環中移動刷新 – Reniuz 2011-05-27 14:27:54

+0

您使用的是什麼版本的.NET?你完全不應該使用新的XmlTextWriter()(從.NET 2.0開始),並且你可能會更好地使用LINQ to XML來使用[XStreamingElement](http://msdn.microsoft.com/zh-cn/library/ system.xml.linq.xstreamingelement.aspx)。 – 2011-05-27 14:28:25

+3

你從哪裏得到OOM異常?循環訪問數據行或讀取數據時?什麼是'_source'? – CodingWithSpike 2011-05-27 14:34:54

回答

2

嘗試每1000項左右沖洗作家。你也可能想要從數據源中部分檢索數據。

+0

你能告訴我一個你建議的例子嗎? – 2011-05-27 15:26:47

+1

試試吧?使用一個計數器,檢查它是否爲1000,然後刷新文件並重置計數器。 – 2011-05-27 15:30:56

+0

按@Ramhound的建議。要部分檢索數據源中的數據,它取決於它是什麼類型的數據源。 LINQ?比使用.Skip(X).Take(Y) – Magnus 2011-05-28 11:02:39