2012-01-09 57 views
0

我有一個web應用程序,它根據通過查詢字符串傳入的條件來動態創建XML提要。CPU密集型XmlTextWriter

這是一個非常簡單的應用程序:它讀取查詢字符串變量,並使用它們將數據(從數據庫緩存的數據)格式化爲適當的XML格式。

返回的XML文件大約是25MB ......有很多數據。

我正在使用XmlTextWriter構建XML,然後將其作爲「應用程序/八位字節流」(它可以下載的附件)返回給請求者。

問題是:構建XML似乎使用了100%的CPU,並導致我的其他應用程序出現問題。

有沒有人有建設如此大的XML文件的經驗?任何關於使這個過程更少CPU密集的提示?

代碼示例:

map.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 
      map.WriteStartElement("rss"); 
      map.WriteAttributeString("version", "2.0"); 
      map.WriteAttributeString("xmlns:g", "http://base.google.com/ns/1.0"); 
      map.WriteStartElement("channel"); 
      map.WriteElementString("link", "http://www.mywebsite.com..."); 

      ProductCollection items = Product.GetCachedSiteProducts(); 
      foreach (Product p in items) 
      { 
map.WriteStartElement("item"); 
........ 
        map.WriteElementString("description", p.Description); 
        map.WriteElementString("g:id", p.SiteSku); 
        map.WriteElementString("g:condition", "new"); 
        map.WriteElementString("g:price", p.Price.ToString() + " USD"); 
............... 

        map.WriteEndElement(); //item    
       } 
      } 
      map.WriteEndElement();//channel  
      map.WriteEndElement();//rss  
      Response.Write(sw.ToString()); 

更新:我回答我的問題..感謝那些誰問我要發佈更多的代碼,這是一個容易當我看着更仔細。

代碼使用「Response.write(map.ToString())」輸出xml。哇,這是低效的。將更新代碼。謝謝大家!

+0

你可以發佈你實際用於構建XMLStream的代碼,也許這裏有一些消費問題..沒有看到我認爲的代碼 – MethodMan 2012-01-09 17:30:10

+0

有沒有辦法可以創建一個需要的shell值要輸入,即不要重建100%的時間?你有沒有考慮緩存迴應? – 2012-01-09 17:30:43

+0

我們構建的XML文件> 100 MB,並且不使用100%的CPU ...所以我懷疑以某種方式幫助您需要顯示一些源代碼... – Yahia 2012-01-09 17:34:42

回答

3

一個是彈簧想到殺到Response.Writer(sw.ToString())

這就像你正在編寫一個StringWriter第一,然後發送到輸出流,爲什麼不直接寫在這裏輸出流?

我不希望單靠CPU使用率或100%的CPU使用率。

ProductCollection什麼是ProductCollection,因爲你循環看起來是CPU使用率高的最可能原因。如果你的代碼做正確IEnumerable<Product>和獲得產品JIT這可能會導致大量的CPU使用情況,如果你獲得產品的一些持久性存儲(例如,每個迭代需要一些獨立的數據庫調用)

沒有看到進一步的源代碼,這是很難告訴可能是什麼原因的問題。

+0

我在更新我的問題,因爲你寫這個:)確實,這也是我想出的答案,所以標記爲正確。我也會研究你對產品收集的建議.....集合實際上是從緩存中提取出來的,並且不會爲每個產品進行獨立的數據庫調用,但我也會研究這些操作。謝謝! – Rebecca 2012-01-09 17:49:08

相關問題