我有一個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。哇,這是低效的。將更新代碼。謝謝大家!
你可以發佈你實際用於構建XMLStream的代碼,也許這裏有一些消費問題..沒有看到我認爲的代碼 – MethodMan 2012-01-09 17:30:10
有沒有辦法可以創建一個需要的shell值要輸入,即不要重建100%的時間?你有沒有考慮緩存迴應? – 2012-01-09 17:30:43
我們構建的XML文件> 100 MB,並且不使用100%的CPU ...所以我懷疑以某種方式幫助您需要顯示一些源代碼... – Yahia 2012-01-09 17:34:42